protected function loadQueryTemplate(O\Expression $queryExpression, O\IEvaluationContext $evaluationContext = null, Queries\IResolvedParameterRegistry &$resolvedParameters = null, callable $resolveQueryCallback, callable $parseQueryCallback, callable $createTemplateCallback, Caching\ICacheAdapter &$queryCache = null, &$templateHash)
{
/** @var $resolution Queries\IResolvedQuery */
$resolution = $resolveQueryCallback($queryExpression, $evaluationContext);
$templateHash = $resolution->getHash();
$queryCache = $this->getCompiledQueryCache($resolution->getQueryable()->getSourceInfo());
$queryTemplate = $queryCache->tryGet($templateHash);
if (!$queryTemplate instanceof Compilation\IQueryTemplate) {
/** @var $query Queries\IQuery */
$query = $parseQueryCallback($queryExpression, $evaluationContext);
/** @var $queryTemplate Compilation\IQueryTemplate */
$queryTemplate = $createTemplateCallback($query);
$queryCache->save($templateHash, $queryTemplate);
}
$resolvedParameters = $queryTemplate->getParameters()->resolve($resolution);
return $queryTemplate;
}