blob: 796048fd17ad145af18bdd62fe529054242209e0 [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\Cache;
use Apache\Ignite\Exception\ClientException;
use Apache\Ignite\Internal\Binary\BinaryCommunicator;
use Apache\Ignite\Internal\Binary\MessageBuffer;
use Apache\Ignite\Internal\Utils\ArgumentChecker;
/**
* Class representing one Query Index element of QueryEntity of Ignite CacheConfiguration.
*
* All configuration settings are optional and have defaults which are defined on a server side.
*
* See Apache Ignite documentation for details of every configuration setting.
*/
class QueryIndex
{
/** @name QueryIndexType
* @anchor QueryIndexType
* @{
*/
const TYPE_SORTED = 0;
const TYPE_FULLTEXT = 1;
const TYPE_GEOSPATIAL = 2;
/** @} */ // end of QueryIndexType
private $name;
private $type;
private $inlineSize;
private $fields;
/**
* QueryIndex constructor.
*
* @param string|null $name
* @param int $type one of @ref QueryIndexType constants.
*
* @throws ClientException if error.
*/
public function __construct(string $name = null, int $type = self::TYPE_SORTED)
{
$this->name = $name;
$this->setType($type);
$this->inlineSize = -1;
$this->fields = null;
}
/**
*
*
* @param string $name
*
* @return QueryIndex the same instance of the QueryIndex.
*/
public function setName(string $name): QueryIndex
{
$this->name = $name;
return $this;
}
/**
*
*
* @return string|null
*/
public function getName(): ?string
{
return $this->name;
}
/**
*
*
* @param int $type one of @ref QueryIndexType constants.
*
* @return QueryIndex the same instance of the QueryIndex.
*
* @throws ClientException if error.
*/
public function setType(int $type): QueryIndex
{
ArgumentChecker::hasValueFrom(
$type, 'type', false, [self::TYPE_SORTED, self::TYPE_FULLTEXT, self::TYPE_GEOSPATIAL]);
$this->type = $type;
return $this;
}
/**
*
*
* @return int index type, one of @ref QueryIndexType constants.
*/
public function getType(): int
{
return $this->type;
}
/**
*
*
* @param int $inlineSize
*
* @return QueryIndex the same instance of the QueryIndex.
*/
public function setInlineSize(int $inlineSize): QueryIndex
{
$this->inlineSize = $inlineSize;
return $this;
}
/**
*
*
* @return int
*/
public function getInlineSize(): int
{
return $this->inlineSize;
}
/**
*
*
* @param array[string => bool] $fields
*
* @return QueryIndex the same instance of the QueryIndex.
*/
public function setFields(array $fields): QueryIndex
{
$this->fields = $fields;
return $this;
}
/**
*
*
* @return array[string => bool]|null
*/
public function getFields(): ?array
{
return $this->fields;
}
// This is not the public API method, is not intended for usage by an application.
public function write(BinaryCommunicator $communicator, MessageBuffer $buffer): void
{
BinaryCommunicator::writeString($buffer, $this->name);
$buffer->writeByte($this->type);
$buffer->writeInteger($this->inlineSize);
// write fields
$length = $this->fields ? count($this->fields) : 0;
$buffer->writeInteger($length);
if ($length > 0) {
foreach ($this->fields as $key => $value) {
BinaryCommunicator::writeString($buffer, $key);
$buffer->writeBoolean($value);
}
}
}
// This is not the public API method, is not intended for usage by an application.
public function read(BinaryCommunicator $communicator, MessageBuffer $buffer): void
{
$this->name = BinaryCommunicator::readString($buffer);
$this->type = $buffer->readByte();
$this->inlineSize = $buffer->readInteger();
// read fields
$length = $buffer->readInteger();
$this->fields = [];
if ($length > 0) {
$this->fields[BinaryCommunicator::readString($buffer)] = $buffer->readBoolean();
}
}
}