public function indexedQuery(IndexedQuery $query, $use_cache = true)
{
$metadata = $this->getMapper()->getEntityMetadata($query->getClassName());
$prefix = $this->getKeyScheme()->getEntityKey($metadata->getTableName(), '');
$prefix_len = strlen($prefix);
$master_list = null;
foreach ($query->getIndices() as $index_name => $index_key) {
if ($index_name == '@id') {
$key = $this->getKeyScheme()->getEntityKey($metadata->getTableName(), $index_key);
$set = $this->getDriver()->scan($key);
$results = [];
foreach ($set as $search_key) {
$results[] = substr($search_key, $prefix_len);
}
} else {
$index = $metadata->getIndexByName($index_name);
if (!$index) {
throw new InvalidArgumentException('Index "' . $index_name . '" does not exist on the entity');
}
$key = $this->getKeyScheme()->getIndexKey($index, $index_key);
$set = $this->getDriver()->scan($key);
$results = [];
foreach ($set as $search_key) {
$results[] = $this->getDriver()->getSingleValueIndex($search_key);
}
}
if ($master_list === null) {
$master_list = $results;
} else {
$master_list = array_intersect($master_list, $results);
}
}
return new QueryResult($this->entity_manager, $query, array_values($master_list), null, $use_cache);
}