Official Riak Client for PHP
  • Namespace
  • Class
  • Tree

Namespaces

  • Basho
    • Riak
      • Api
        • Http
          • Translator
      • Command
        • Bucket
        • Builder
          • MapReduce
          • Search
          • TimeSeries
        • DataType
          • Counter
          • Map
          • Set
        • Indexes
        • MapReduce
        • Object
        • Search
          • Index
          • Schema
        • Stats
        • TimeSeries
          • Query
      • DataType
      • Node
        • Builder
      • Search
      • TimeSeries

Classes

  • Basho\Riak
  • Basho\Riak\Api
  • Basho\Riak\Api\Http
  • Basho\Riak\Api\Http\Translator\ObjectResponse
  • Basho\Riak\Api\Http\Translator\SecondaryIndex
  • Basho\Riak\Bucket
  • Basho\Riak\Command
  • Basho\Riak\Command\Bucket\Delete
  • Basho\Riak\Command\Bucket\Fetch
  • Basho\Riak\Command\Bucket\Response
  • Basho\Riak\Command\Bucket\Store
  • Basho\Riak\Command\Builder
  • Basho\Riak\Command\Builder\DeleteObject
  • Basho\Riak\Command\Builder\FetchBucketProperties
  • Basho\Riak\Command\Builder\FetchCounter
  • Basho\Riak\Command\Builder\FetchMap
  • Basho\Riak\Command\Builder\FetchObject
  • Basho\Riak\Command\Builder\FetchPreflist
  • Basho\Riak\Command\Builder\FetchSet
  • Basho\Riak\Command\Builder\FetchStats
  • Basho\Riak\Command\Builder\IncrementCounter
  • Basho\Riak\Command\Builder\MapReduce\FetchObjects
  • Basho\Riak\Command\Builder\Ping
  • Basho\Riak\Command\Builder\QueryIndex
  • Basho\Riak\Command\Builder\Search\AssociateIndex
  • Basho\Riak\Command\Builder\Search\DeleteIndex
  • Basho\Riak\Command\Builder\Search\DissociateIndex
  • Basho\Riak\Command\Builder\Search\FetchIndex
  • Basho\Riak\Command\Builder\Search\FetchObjects
  • Basho\Riak\Command\Builder\Search\FetchSchema
  • Basho\Riak\Command\Builder\Search\StoreIndex
  • Basho\Riak\Command\Builder\Search\StoreSchema
  • Basho\Riak\Command\Builder\SetBucketProperties
  • Basho\Riak\Command\Builder\StoreObject
  • Basho\Riak\Command\Builder\TimeSeries\DeleteRow
  • Basho\Riak\Command\Builder\TimeSeries\DescribeTable
  • Basho\Riak\Command\Builder\TimeSeries\FetchRow
  • Basho\Riak\Command\Builder\TimeSeries\Query
  • Basho\Riak\Command\Builder\TimeSeries\StoreRows
  • Basho\Riak\Command\Builder\UpdateMap
  • Basho\Riak\Command\Builder\UpdateSet
  • Basho\Riak\Command\DataType\Counter\Fetch
  • Basho\Riak\Command\DataType\Counter\Response
  • Basho\Riak\Command\DataType\Counter\Store
  • Basho\Riak\Command\DataType\Map\Fetch
  • Basho\Riak\Command\DataType\Map\Response
  • Basho\Riak\Command\DataType\Map\Store
  • Basho\Riak\Command\DataType\Set\Fetch
  • Basho\Riak\Command\DataType\Set\Response
  • Basho\Riak\Command\DataType\Set\Store
  • Basho\Riak\Command\Indexes\Query
  • Basho\Riak\Command\Indexes\Response
  • Basho\Riak\Command\MapReduce\Fetch
  • Basho\Riak\Command\MapReduce\Response
  • Basho\Riak\Command\Object
  • Basho\Riak\Command\Object\Delete
  • Basho\Riak\Command\Object\Fetch
  • Basho\Riak\Command\Object\FetchPreflist
  • Basho\Riak\Command\Object\Response
  • Basho\Riak\Command\Object\Store
  • Basho\Riak\Command\Ping
  • Basho\Riak\Command\Response
  • Basho\Riak\Command\Search\Fetch
  • Basho\Riak\Command\Search\Index\Delete
  • Basho\Riak\Command\Search\Index\Fetch
  • Basho\Riak\Command\Search\Index\Response
  • Basho\Riak\Command\Search\Index\Store
  • Basho\Riak\Command\Search\Response
  • Basho\Riak\Command\Search\Schema\Fetch
  • Basho\Riak\Command\Search\Schema\Response
  • Basho\Riak\Command\Search\Schema\Store
  • Basho\Riak\Command\Stats
  • Basho\Riak\Command\Stats\Response
  • Basho\Riak\Command\TimeSeries\Delete
  • Basho\Riak\Command\TimeSeries\Fetch
  • Basho\Riak\Command\TimeSeries\Query\Fetch
  • Basho\Riak\Command\TimeSeries\Query\Response
  • Basho\Riak\Command\TimeSeries\Response
  • Basho\Riak\Command\TimeSeries\Store
  • Basho\Riak\DataType
  • Basho\Riak\DataType\Counter
  • Basho\Riak\DataType\Map
  • Basho\Riak\DataType\Set
  • Basho\Riak\Location
  • Basho\Riak\Node
  • Basho\Riak\Node\Builder
  • Basho\Riak\Node\Config
  • Basho\Riak\Object
  • Basho\Riak\Search\Doc
  • Basho\Riak\TimeSeries\Cell

Interfaces

  • Basho\Riak\ApiInterface
  • Basho\Riak\Command\BuilderInterface
  • Basho\Riak\CommandInterface

Traits

  • Basho\Riak\Command\Builder\BucketTrait
  • Basho\Riak\Command\Builder\IndexTrait
  • Basho\Riak\Command\Builder\LocationTrait
  • Basho\Riak\Command\Builder\ObjectTrait
  • Basho\Riak\Command\Builder\TimeSeries\KeyTrait
  • Basho\Riak\Command\Builder\TimeSeries\RowsTrait
  • Basho\Riak\Command\Builder\TimeSeries\TableTrait
  • Basho\Riak\HeadersTrait

Exceptions

  • Basho\Riak\Api\Exception
  • Basho\Riak\Command\Builder\Exception
  • Basho\Riak\Command\Exception
  • Basho\Riak\DataType\Exception
  • Basho\Riak\Exception
  • Basho\Riak\Node\Builder\Exception
  1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36  37  38  39  40  41  42  43  44  45  46  47  48  49  50  51  52  53  54  55  56  57  58  59  60  61  62  63  64  65  66  67  68  69  70  71  72  73  74  75  76  77  78  79  80  81  82  83  84  85  86  87  88  89  90  91  92  93  94  95  96  97  98  99 100 101 102 
<?php

namespace Basho\Riak\Api\Http\Translator;

/**
 * @author Alex Moore <amoore at basho d0t com>
 */
class SecondaryIndex
{
    const INT_INDEX_SUFFIX = '_int';
    const STR_IDX_SUFFIX = '_bin';
    const IDX_SUFFIX_LEN = 4;
    const IDX_HEADER_PREFIX = "x-riak-index-";
    const IDX_HEADER_PREFIX_LEN = 13;

    public static function isIntIndex($headerKey)
    {
        return static::indexNameContainsTypeSuffix($headerKey, self::INT_INDEX_SUFFIX);
    }

    public function extractIndexesFromHeaders(&$headers)
    {
        $indexes = [];

        foreach ($headers as $key => $value) {

            if (!$this->isIndexHeader($key)) {
                continue;
            }

            $this->parseIndexHeader($indexes, $key, $value);
            unset($headers[$key]);
        }

        return $indexes;
    }

    public static function isIndexHeader($headerKey)
    {
        if (strlen($headerKey) <= self::IDX_HEADER_PREFIX_LEN) {
            return false;
        }

        return substr_compare($headerKey, self::IDX_HEADER_PREFIX, 0, self::IDX_HEADER_PREFIX_LEN) == 0;
    }

    private function parseIndexHeader(&$indexes, $key, $rawValue)
    {
        $indexName = $this->getIndexNameWithType($key);
        $value = $this->getIndexValue($indexName, $rawValue);

        $indexes[$indexName] = $value;
    }

    private function getIndexNameWithType($key)
    {
        return substr($key, self::IDX_HEADER_PREFIX_LEN);
    }

    private function getIndexValue($indexName, $value)
    {
        $values = explode(", ", $value);

        if ($this->isStringIndex($indexName)) {
            return $values;
        } else {
            return array_map("intval", $values);
        }
    }

    public static function isStringIndex($headerKey)
    {
        return static::indexNameContainsTypeSuffix($headerKey, self::STR_IDX_SUFFIX);
    }

    private static function indexNameContainsTypeSuffix($indexName, $typeSuffix)
    {
        $nameLen = strlen($indexName) - self::IDX_SUFFIX_LEN;

        return substr_compare($indexName, $typeSuffix, $nameLen) == 0;
    }

    public function createHeadersFromIndexes($indexes)
    {
        $headers = [];

        foreach ($indexes as $indexName => $values) {
            $this->createIndexHeader($headers, $indexName, $values);
        }

        return $headers;
    }

    private function createIndexHeader(&$headers, $indexName, $values)
    {
        $headerKey = self::IDX_HEADER_PREFIX. $indexName;
        foreach ($values as $indexName => $value) {
            $headers[] = [$headerKey, $value];
        }
    }
}
Official Riak Client for PHP API documentation generated by ApiGen