blob: 4d9db53b68d1a24e8ae069fd5ec19bae0f707b1b [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.
*/
require_once __DIR__ . '/../vendor/autoload.php';
use Apache\Ignite\Client;
use Apache\Ignite\ClientConfiguration;
use Apache\Ignite\Cache\CacheEntry;
use Apache\Ignite\Query\ScanQuery;
use Apache\Ignite\Exception\ClientException;
use Apache\Ignite\Data\BinaryObject;
use Apache\Ignite\Type\ObjectType;
use Apache\Ignite\Type\ComplexObjectType;
class Person
{
private static $personId = 0;
public $id;
public $firstName;
public $lastName;
public $salary;
public function __construct(string $firstName = null, string $lastName = null, float $salary = 0)
{
$this->id = Person::generateId();
$this->firstName = $firstName;
$this->lastName = $lastName;
$this->salary = $salary;
}
public function printObject(): void
{
echo(sprintf(' %s%s', Person::class, PHP_EOL));
Person::printField('id', $this->id);
Person::printField('firstName', $this->firstName);
Person::printField('lastName', $this->lastName);
Person::printField('salary', $this->salary);
}
public static function generateId(): int
{
$id = Person::$personId;
Person::$personId++;
return $id;
}
public static function printField(string $fieldName, $fieldValue): void
{
echo(sprintf(' %s : %s%s', $fieldName, $fieldValue, PHP_EOL));
}
}
// This example demonstrates basic Cache, Key-Value Queries and Scan Query operations:
// - connects to a node
// - creates a cache, if it doesn't exist
// - specifies key type as Integer
// - executes different cache operations with Complex Objects and Binary Objects
// - put several objects
// - putAll
// - get
// - getAll
// - ScanQuery
// - destroys the cache
class CachePutGetExample
{
const ENDPOINT = '127.0.0.1:10800';
const CACHE_NAME = 'CachePutGetExample_person';
private $personCache;
private $binaryObjectCache;
private $personObjectType;
public function start(): void
{
$client = new Client();
try {
$client->connect(new ClientConfiguration(CachePutGetExample::ENDPOINT));
$this->personObjectType = (new ComplexObjectType())->
setFieldType('id', ObjectType::INTEGER);
$this->personCache = $client->getOrCreateCache(CachePutGetExample::CACHE_NAME)->
setKeyType(ObjectType::INTEGER)->
setValueType($this->personObjectType);
$this->binaryObjectCache = $client->getCache(CachePutGetExample::CACHE_NAME)->
setKeyType(ObjectType::INTEGER);
$this->putComplexObjects();
$this->putAllBinaryObjects();
$this->getAllComplexObjects();
$this->getBinaryObjects();
$this->scanQuery();
$client->destroyCache(CachePutGetExample::CACHE_NAME);
} catch (ClientException $e) {
echo('ERROR: ' . $e->getMessage() . PHP_EOL);
} finally {
$client->disconnect();
}
}
private function putComplexObjects(): void
{
$person1 = new Person('John', 'Doe', 1000);
$person2 = new Person('Jane', 'Roe', 2000);
$this->personCache->put($person1->id, $person1);
$this->personCache->put($person2->id, $person2);
echo('Complex Objects put successfully' . PHP_EOL);
}
private function putAllBinaryObjects(): void
{
// create binary object from scratch
$personBinaryObject1 = (new BinaryObject(Person::class))->
setField('id', Person::generateId(), ObjectType::INTEGER)->
setField('firstName', 'Mary')->
setField('lastName', 'Major')->
setField('salary', 1500, ObjectType::DOUBLE);
// create binary object from complex object
$personBinaryObject2 = BinaryObject::fromObject(
new Person('Richard', 'Miles', 800), $this->personObjectType);
$this->binaryObjectCache->putAll([
new CacheEntry($personBinaryObject1->getField('id'), $personBinaryObject1),
new CacheEntry($personBinaryObject2->getField('id'), $personBinaryObject2)
]);
echo('Binary Objects put successfully using putAll()' . PHP_EOL);
}
private function getAllComplexObjects(): void
{
$persons = $this->personCache->getAll([0, 1]);
echo('Complex Objects getAll:' . PHP_EOL);
foreach ($persons as $person) {
$person->getValue()->printObject();
}
}
private function getBinaryObjects(): void
{
$personBinaryObject = $this->binaryObjectCache->get(2);
echo('Binary Object get:' . PHP_EOL);
echo(sprintf(" %s%s", $personBinaryObject->getTypeName(), PHP_EOL));
foreach ($personBinaryObject->getFieldNames() as $fieldName) {
$fieldValue = $personBinaryObject->getField($fieldName);
Person::printField($fieldName, $fieldValue);
}
}
private function scanQuery(): void
{
$cursor = $this->personCache->query(new ScanQuery());
echo('Scan query results:' . PHP_EOL);
foreach ($cursor as $cacheEntry) {
$cacheEntry->getValue()->printObject();
}
}
}
$cachePutGetExample = new CachePutGetExample();
$cachePutGetExample->start();