public function testCreateDataSet_conflictingFilters()
 {
     $request = $this->getBaseRequest();
     $this->qb->andWhere('p.id = ?0')->setParameter(0, 'Test');
     $request->columnFilters[0] = 'test';
     $dataSet = $this->dataSource->createDataSet($request);
     $where = $this->qb->getDQLPart('where')->getParts();
     $this->assertCount(2, $where);
     $this->assertCount(2, $this->qb->getParameters());
 }
 /**
  * {@inheritdoc}
  */
 public function getSize()
 {
     if (null === $this->size) {
         $qb = clone $this->queryBuilder;
         $alias = current($qb->getRootAliases());
         $qb->setParameters($this->queryBuilder->getParameters());
         $qb->select("count({$alias})");
         $this->size = (int) $qb->getQuery()->getSingleScalarResult();
     }
     return $this->size;
 }
示例#3
0
 /**
  * Clones a query.
  *
  * @param QueryBuilder $query The query.
  *
  * @return QueryBuilder The cloned query.
  */
 public static function cloneQuery($query)
 {
     /* @var $cloneQuery QueryBuilder */
     $cloneQuery = clone $query;
     $cloneQuery->setParameters(clone $query->getParameters());
     return $cloneQuery;
 }
 function it_uses_comparison_specific_dql_alias_if_passed(QueryBuilder $qb, ArrayCollection $parameters)
 {
     $this->beConstructedWith(Comparison::GT, 'age', 18, null);
     $qb->getParameters()->willReturn($parameters);
     $parameters->count()->willReturn(10);
     $qb->setParameter('comparison_10', 18)->shouldBeCalled();
     $this->getFilter($qb, 'x')->shouldReturn('x.age > :comparison_10');
 }
 public function it_ends_with_wildcard_when_using_starts_with(QueryBuilder $qb, ArrayCollection $parameters)
 {
     $this->beConstructedWith($this->field, $this->value, Like::STARTS_WITH, "dqlAlias");
     $qb->getParameters()->willReturn($parameters);
     $parameters->count()->willReturn(1);
     $qb->setParameter("comparison_1", "bar%")->shouldBeCalled();
     $this->match($qb, null);
 }
示例#6
0
 function it_returns_expression_func_object(QueryBuilder $qb, ArrayCollection $parameters, Expr $expr)
 {
     $dqlAlias = 'a';
     $qb->expr()->willReturn($expr);
     $expr->in(sprintf('%s.%s', $dqlAlias, $this->field), ':in_10')->shouldBeCalled();
     $qb->getParameters()->willReturn($parameters);
     $parameters->count()->willReturn(10);
     $qb->setParameter('in_10', $this->value)->shouldBeCalled();
     $this->getFilter($qb, null);
 }
 /**
  * We update the query to count, get ids and fetch data, so, we can lost expected query builder parameters,
  * and we have to remove them
  *
  * @param QueryBuilder $qb
  */
 public static function removeExtraParameters(QueryBuilder $qb)
 {
     $parameters = $qb->getParameters();
     $dql = $qb->getDQL();
     foreach ($parameters as $parameter) {
         if (strpos($dql, ':' . $parameter->getName()) === false) {
             $parameters->removeElement($parameter);
         }
     }
     $qb->setParameters($parameters);
 }
 /**
  * @param QueryBuilder $query
  * @param QueryBuilder $subQuery
  * @return QueryBuilder $query with query's and subQuery's parameters.
  */
 private function andWherePupilNotIn(QueryBuilder $query, QueryBuilder $subQuery, $EleveQueryAlias)
 {
     $query->andWhere($query->expr()->notIn($EleveQueryAlias . ".id", $subQuery->getDQL()));
     /**
      * @var Parameter $param
      */
     foreach ($subQuery->getParameters() as $param) {
         $query->setParameter($param->getName(), $param->getValue(), $param->getType());
     }
     return $query;
 }
 /**
  * Removes unused parameters from query builder
  *
  * @param QueryBuilder $qb
  */
 public function fixUnusedParameters(QueryBuilder $qb)
 {
     $dql = $qb->getDQL();
     $usedParameters = [];
     /** @var $parameter \Doctrine\ORM\Query\Parameter */
     foreach ($qb->getParameters() as $parameter) {
         if ($this->dqlContainsParameter($dql, $parameter->getName())) {
             $usedParameters[$parameter->getName()] = $parameter->getValue();
         }
     }
     $qb->setParameters($usedParameters);
 }
 /**
  * Get Paginator
  * 
  * @param integer $limit ( limit per page )
  * @param array $options
  * @return \Knp\Bundle\PaginatorBundle\Pagination\SlidingPagination
  */
 protected function getPaginator($limit = 30, $options = array())
 {
     $page = $this->get('request')->query->get('page', 1);
     $cnt = 0;
     if ($this->get('request')->query->has('page')) {
         $page = $this->get('request')->query->get('page');
         $this->get('session')->set('_pager_' . $this->get('request')->get('_route'), $page);
     } elseif ($this->get('session')->has('_pager_' . $this->get('request')->get('_route'))) {
         $page = $this->get('session')->get('_pager_' . $this->get('request')->get('_route'));
     }
     if (isset($options['total_item_count']) and (int) $options['total_item_count']) {
         $cnt = $options['total_item_count'];
     }
     $this->paginator = $this->get('knp_paginator');
     if (is_array($this->query) or $this->query instanceof QueryBuilder) {
         $pagination = $this->paginator->paginate($this->query, $page, $limit, $options);
     } elseif ($this->query instanceof NativeQuery) {
         $rsm = new ResultSetMapping();
         $rsm->addScalarResult('cnt', 'cnt');
         $q = strstr($this->query->getSQL(), " FROM ");
         $q = "SELECT COUNT(*) cnt " . $q;
         $cntQuery = $this->em->createNativeQuery($q, $rsm)->setParameters($this->query->getParameters());
         try {
             $cnt = $cntQuery->getSingleScalarResult();
         } catch (\Doctrine\Orm\NoResultException $e) {
             $cnt = 0;
         }
         $sql = $this->query->getSQL();
         $pagination = $this->paginator->paginate(array());
         $sort_name = $pagination->getPaginatorOption('sortFieldParameterName');
         $sort_direction_name = $pagination->getPaginatorOption('sortDirectionParameterName');
         if ($this->get('request')->query->has($sort_name) and $this->get('request')->query->has($sort_direction_name)) {
             $sql .= ' ORDER BY ' . $this->get('request')->query->get($sort_name) . ' ' . $this->get('request')->query->get($sort_direction_name);
         } elseif (isset($options['default_sort']) and $options['default_sort']) {
             $sql .= ' ORDER BY ';
             foreach ($options['default_sort'] as $field => $type) {
                 $sql .= $field . ' ' . $type . ',';
             }
             $sql = trim($sql, ',');
         }
         if (!isset($options['not_use_limit_offset'])) {
             $offset = $limit * ($page - 1);
             $this->query->setSQL($sql . ' LIMIT ' . $limit . ' OFFSET ' . $offset);
         }
         $pagination->setCurrentPageNumber($page);
         $pagination->setItemNumberPerPage($limit);
         $pagination->setTotalItemCount($cnt);
         $pagination->setItems($this->query->getResult());
     }
     $pagination->setTemplate($this->container->getParameter('zk2_admin_panel.pagination_template'));
     $pagination->setSortableTemplate($this->container->getParameter('zk2_admin_panel.sortable_template'));
     return compact('pagination');
 }
 /**
  * @param QueryBuilder $qb
  *
  * @return string
  */
 public function getRawSQLFromORMQueryBuilder(QueryBuilder $qb)
 {
     $sql = $qb->getDQL();
     $parameters = $qb->getParameters();
     /** @var Query\Parameter $param */
     foreach ($parameters as $param) {
         if (is_array($param->getValue()) && !empty($param->getValue())) {
             $sql = str_replace(':' . $param->getName(), "'" . implode("', '", $param->getValue()) . "'", $sql);
         } else {
             $sql = str_replace(':' . $param->getName(), "'" . $param->getValue() . "'", $sql);
         }
     }
     return $sql;
 }
 /**
  * {@inherit}
  */
 public function getItemsCountInCategory(CategoryInterface $category, QueryBuilder $categoryQb = null)
 {
     $qb = $this->em->createQueryBuilder();
     $qb->select($qb->expr()->count('distinct i'));
     $qb->from($this->entityName, 'i');
     $qb->join('i.categories', 'node');
     if (null === $categoryQb) {
         $qb->where('node.id = :nodeId');
         $qb->setParameter('nodeId', $category->getId());
     } else {
         $qb->where($categoryQb->getDqlPart('where'));
         $qb->setParameters($categoryQb->getParameters());
     }
     return $qb->getQuery()->getSingleScalarResult();
 }
 /**
  * Applies mass action parameters on the query builder
  *
  * @param QueryBuilder $qb
  * @param bool         $inset
  * @param array        $values
  */
 public function applyMassActionParameters($qb, $inset, $values)
 {
     if (!empty($values)) {
         $valueWhereCondition = $inset ? $qb->expr()->in($this->getAlias(), $values) : $qb->expr()->notIn($this->getAlias(), $values);
         $qb->andWhere($valueWhereCondition);
     }
     if (null !== $qb->getDQLPart('where')) {
         $whereParts = $qb->getDQLPart('where')->getParts();
         $qb->resetDQLPart('where');
         foreach ($whereParts as $part) {
             if (!is_string($part) || !strpos($part, 'entityIds')) {
                 $qb->andWhere($part);
             }
         }
     }
     $qb->setParameters($qb->getParameters()->filter(function ($parameter) {
         return $parameter->getName() !== 'entityIds';
     }));
     // remove limit of the query
     $qb->setMaxResults(null);
 }
 /**
  * @dataProvider applyDataProvider
  */
 public function testApply($platform, $value, $comparisonType, $expectedDql, $expectedParams)
 {
     $paramCounter = 0;
     $em = $this->getMock('Doctrine\\ORM\\EntityManagerInterface');
     $qb = new QueryBuilder($em);
     $ds = $this->getMock('Oro\\Bundle\\FilterBundle\\Datasource\\Orm\\OrmFilterDatasourceAdapter', ['generateParameterName', 'getDatabasePlatform'], [$qb]);
     $ds->expects($this->any())->method('generateParameterName')->willReturnCallback(function () use(&$paramCounter) {
         return sprintf('param%s', ++$paramCounter);
     });
     $ds->expects($this->any())->method('getDatabasePlatform')->willReturn($platform);
     $data = ['type' => $comparisonType, 'value' => $value];
     $em->expects($this->any())->method('getExpressionBuilder')->willReturn(new Query\Expr());
     $qb->select('j')->from('TestEntity', 'j');
     $this->filter->apply($ds, $data);
     $this->assertEquals($expectedDql, $qb->getDQL());
     $params = [];
     /** @var Query\Parameter $param */
     foreach ($qb->getParameters() as $param) {
         $params[$param->getName()] = $param->getValue();
     }
     $this->assertEquals($expectedParams, $params);
 }
示例#15
0
 /**
  * @param QueryBuilder $qb
  * @param Criteria     $criteria
  */
 public static function addCriteria(QueryBuilder $qb, Criteria $criteria)
 {
     $rootAlias = $qb->getRootAlias();
     $visitor = new QueryExpressionVisitor($rootAlias);
     if ($whereExpression = $criteria->getWhereExpression()) {
         $qb->andWhere($visitor->dispatch($whereExpression));
         foreach ($visitor->getParameters() as $parameter) {
             $qb->getParameters()->add($parameter);
         }
     }
     if ($criteria->getOrderings()) {
         foreach ($criteria->getOrderings() as $sort => $order) {
             $qb->addOrderBy($rootAlias . '.' . $sort, $order);
         }
     }
     // Overwrite limits only if they was set in criteria
     if (($firstResult = $criteria->getFirstResult()) !== null) {
         $qb->setFirstResult($firstResult);
     }
     if (($maxResults = $criteria->getMaxResults()) !== null) {
         $qb->setMaxResults($maxResults);
     }
 }
 /**
  * @internal
  */
 private function incorporateOrmQueryBuilder(QueryBuilder $qb, FilterInterface $filter)
 {
     $criteria = $this->getFilteringCriteria($filter);
     $rootAliases = $qb->getRootAliases();
     $visitor = new OrmQueryExpressionVisitor($rootAliases, $this->fieldMap);
     if ($whereExpression = $criteria->getWhereExpression()) {
         $qb->andWhere($visitor->dispatch($whereExpression));
         foreach ($visitor->getParameters() as $parameter) {
             $qb->getParameters()->add($parameter);
         }
     }
     if ($criteria->getOrderings()) {
         foreach ($criteria->getOrderings() as $sort => $order) {
             $qb->addOrderBy($visitor->getFieldName($sort), $order);
         }
     }
     // Overwrite limits only if they was set in criteria
     if (($firstResult = $criteria->getFirstResult()) !== null) {
         $qb->setFirstResult($firstResult);
     }
     if (($maxResults = $criteria->getMaxResults()) !== null) {
         $qb->setMaxResults($maxResults);
     }
 }
 public function filter(QueryBuilder $queryBuilder, $metadata, $option)
 {
     if (isset($option['where'])) {
         if ($option['where'] === 'and') {
             $queryType = 'andWhere';
         } elseif ($option['where'] === 'or') {
             $queryType = 'orWhere';
         }
     }
     if (!isset($queryType)) {
         $queryType = 'andWhere';
     }
     $orX = $queryBuilder->expr()->orX();
     $em = $queryBuilder->getEntityManager();
     $qb = $em->createQueryBuilder();
     foreach ($option['conditions'] as $condition) {
         $filter = $this->getFilterManager()->get(strtolower($condition['type']), array($this->getFilterManager()));
         $filter->filter($qb, $metadata, $condition);
     }
     $dqlParts = $qb->getDqlParts();
     $orX->addMultiple($dqlParts['where']->getParts());
     $queryBuilder->setParameters(new ArrayCollection(array_merge_recursive($queryBuilder->getParameters()->toArray(), $qb->getParameters()->toArray())));
     $queryBuilder->{$queryType}($orX);
 }
示例#18
0
 /**
  * @param QueryBuilder $data_source
  * @param string       $primary_key
  */
 public function __construct(QueryBuilder $data_source, $primary_key)
 {
     $this->placeholder = count($data_source->getParameters());
     $this->data_source = $data_source;
     $this->primary_key = $primary_key;
 }
示例#19
0
文件: Config.php 项目: kingsj/core
 /**
  * Add "filter" condition to the query builder
  *
  * @param \Doctrine\ORM\QueryBuilder $qb Current query builder
  *
  * @return \Doctrine\ORM\QueryBuilder
  */
 protected function prepareOptionsAvailabilityCondition(\Doctrine\ORM\QueryBuilder $qb)
 {
     list($condition, $params) = $this->getOptionsAvailabilityCondition();
     return isset($condition) ? $qb->andWhere($condition)->setParameters($qb->getParameters() + $params) : $qb;
 }
示例#20
0
 /**
  * @param QueryBuilder $queryBuilder
  *
  * @return string
  */
 protected function generateParameterName(QueryBuilder $queryBuilder)
 {
     return sprintf('in_%d', count($queryBuilder->getParameters()));
 }
示例#21
0
文件: Markup.php 项目: kingsj/core
 /**
  * Adds markup condition to the query builder object
  *
  * @param \Doctrine\ORM\QueryBuilder           $qb       Query builder object
  * @param \XLite\Logic\Order\Modifier\Shipping $modifier Shipping order modifier
  * @param integer                              $zoneId   Zone Id
  *
  * @return \Doctrine\ORM\QueryBuilder
  */
 protected function addMarkupCondition(\Doctrine\ORM\QueryBuilder $qb, \XLite\Logic\Order\Modifier\Shipping $modifier, $zoneId)
 {
     $prepareSum = array('m.markup_flat', '(m.markup_percent * :value / 100)', '(m.markup_per_item * :items)', '(m.markup_per_weight * :weight)');
     return $qb->addSelect(implode(' + ', $prepareSum) . ' as markup_value')->innerJoin('m.zone', 'zone')->andWhere('m.min_weight <= :weight')->andWhere('zone.zone_id = :zoneId')->andWhere('m.max_weight >= :weight')->andWhere('m.min_total <= :total')->andWhere('m.max_total >= :total')->andWhere('m.min_items <= :items')->andWhere('m.max_items >= :items')->setParameters(array_merge($qb->getParameters(), array('zoneId' => $zoneId, 'weight' => $modifier->getWeight(), 'total' => $modifier->getSubtotal(), 'items' => $modifier->countItems(), 'value' => $modifier->getSubtotal())));
 }
示例#22
0
 /**
  * @param QueryBuilder $qb
  * @param array $graph
  * @return Expr\Andx|Expr\Orx|null
  * @throws InvalidCriteriaException
  */
 public function createQueryExpression(QueryBuilder $qb, array $graph = array())
 {
     $key = key($graph);
     $expr = null;
     if ($key === ResolverInterface::T_EXPR) {
         $spec = key($graph[$key]);
         $value = $graph[$key][$spec];
         $paramIndex = count($qb->getParameters()) + 1;
         list($field, $equation) = explode(' ', $spec, 2);
         switch ($equation) {
             case 'IS NULL':
                 $func = 'isNull';
                 break;
             case 'IS NOT NULL':
                 $func = 'isNotNull';
                 break;
             default:
                 list($comp, $valueSpec) = explode(' ', $equation, 2);
                 switch ($comp) {
                     case '=':
                         $func = 'eq';
                         break;
                     case '<>':
                         $func = 'neq';
                         break;
                     case '<':
                         $func = 'lt';
                         break;
                     case '>':
                         $func = 'gt';
                         break;
                     case '<=':
                         $func = 'lte';
                         break;
                     case '>=':
                         $func = 'gte';
                         break;
                     case 'IN':
                         $func = 'in';
                         break;
                     case 'NOT IN':
                         $func = 'notIn';
                         break;
                     case 'LIKE':
                         $func = 'like';
                         break;
                     case 'NOT LIKE':
                         $func = 'notLike';
                         break;
                     default:
                         throw new InvalidCriteriaException(sprintf('unknown comparison: %s', $comp));
                 }
                 if ($valueSpec === '?') {
                     $qb->setParameter($paramIndex, $value);
                     return $qb->expr()->{$func}($field, '?' . $paramIndex);
                 } elseif (strpos($valueSpec, ':') === 0) {
                     $qb->setParameter(substr($valueSpec, 1), $value);
                     return $qb->expr()->{$func}($field, $valueSpec);
                 } elseif ($value === null) {
                     return $field . ' ' . $comp . ' ' . $valueSpec;
                 }
                 throw new InvalidCriteriaException('invalid field spec: ' . $spec);
         }
         return $qb->expr()->{$func}($field);
     } else {
         if ($key === ResolverInterface::T_AND) {
             $expr = $qb->expr()->andX();
         } elseif ($key === ResolverInterface::T_OR) {
             $expr = $qb->expr()->orX();
         } else {
             throw new InvalidCriteriaException('invalid graph given');
         }
         foreach ($graph[$key] as $sub) {
             $expr->add($this->createQueryExpression($qb, $sub));
         }
         return $expr;
     }
 }
示例#23
0
 /**
  * @param              $filterCondition
  * @param QueryBuilder $queryBuilder
  *
  * @return string
  * @throws \Netdudes\DataSourceryBundle\DataSource\Driver\Doctrine\Exception\ColumnNotFoundException
  */
 protected function buildUniqueToken(FilterCondition $filterCondition, QueryBuilder $queryBuilder)
 {
     return ':token_' . strtolower(str_replace(['.', '-'], '_', $filterCondition->getFieldName())) . '_' . $queryBuilder->getParameters()->count();
 }
 /**
  * We need to drop the query builder, as it contains a PDO instance deep inside.
  *
  * @return array
  */
 public function __sleep()
 {
     $this->parameters = $this->queryBuilder->getParameters();
     return array('entityClassName', 'constraint', 'orderings', 'parameterIndex', 'limit', 'offset', 'parameters', 'joins');
 }
 /**
  * @group DDC-1933
  */
 public function testParametersAreCloned()
 {
     $originalQb = new QueryBuilder($this->_em);
     $originalQb->setParameter('parameter1', 'value1');
     $copy = clone $originalQb;
     $copy->setParameter('parameter2', 'value2');
     $this->assertCount(1, $originalQb->getParameters());
     $this->assertSame('value1', $copy->getParameter('parameter1')->getValue());
     $this->assertSame('value2', $copy->getParameter('parameter2')->getValue());
 }
示例#26
0
 /**
  * @param QueryBuilder $queryBuilder
  *
  * @return string
  */
 protected function getQueryBuilderHash(QueryBuilder $queryBuilder)
 {
     return hash('sha256', json_encode(array('sql' => $queryBuilder->getQuery()->getSQL(), 'parameters' => $queryBuilder->getParameters())));
 }
示例#27
0
 /**
  * We consider two query builders with an equal SQL string and
  * equal parameters to be equal.
  *
  * @param QueryBuilder $queryBuilder
  *
  * @return array
  *
  * @internal This method is public to be usable as callback. It should not
  *           be used in user code.
  */
 public function getQueryBuilderPartsForCachingHash($queryBuilder)
 {
     return array($queryBuilder->getQuery()->getSQL(), $queryBuilder->getParameters()->toArray());
 }
 /**
  * @param  Request $request
  * @return DataSet
  */
 public function createDataSet(Request $request)
 {
     $dataSet = new DataSet();
     $paginatorTotal = $this->createPaginator();
     $dataSet->numberOfTotalRecords = $paginatorTotal->count();
     // Add filters
     $where = [];
     foreach ($request->columnFilters as $column => $filter) {
         $fieldName = $this->columnMapping[$column];
         /**
          * @todo refactor handling of composite/aggregate fields
          */
         if (count(explode(".", $fieldName)) == 1) {
             $fieldName = $this->retrieveExpressionByFieldName($fieldName);
         }
         // Treat '|' as OR and '~' for date ranges
         if (false !== strpos($filter, '|')) {
             $possibleValues = explode('|', $filter);
             $orX = [];
             foreach ($possibleValues as $value) {
                 $paramName = ':datatables_' . $this->qb->getParameters()->count();
                 $this->qb->setParameter($paramName, $value);
                 $orX[] = $this->qb->expr()->eq($fieldName, $paramName);
             }
             $where[] = call_user_func_array([$this->qb->expr(), 'orX'], $orX);
         } elseif (preg_match('/^(\\d{2})-(\\d{2})-(\\d{4})~(\\d{2})-(\\d{2})-(\\d{4})$/', $filter)) {
             $dates = explode('~', $filter);
             $paramName = ':datatables_' . $this->qb->getParameters()->count();
             $this->qb->setParameter($paramName, \DateTime::createFromFormat('d-m-Y', $dates[0]));
             $where[] = $this->qb->expr()->gte($fieldName, $paramName);
             $paramName = ':datatables_' . $this->qb->getParameters()->count();
             $this->qb->setParameter($paramName, \DateTime::createFromFormat('d-m-Y', $dates[1]));
             $where[] = $this->qb->expr()->lte($fieldName, $paramName);
         } else {
             if (false !== strpos($filter, '~')) {
                 continue;
             }
             $paramName = ':datatables_' . $this->qb->getParameters()->count();
             $this->qb->setParameter($paramName, "%{$filter}%");
             $where[] = $this->qb->expr()->like($fieldName, $paramName);
         }
     }
     if (count($where) > 0) {
         $this->qb->andWhere(call_user_func_array([$this->qb->expr(), 'andX'], $where));
     }
     // Add sorting
     foreach ($request->columnSorts as $column => $direction) {
         $this->qb->addOrderBy($this->columnMapping[$column], $direction);
     }
     $this->qb->setFirstResult($request->displayStart);
     $this->qb->setMaxResults($request->displayLength);
     $paginatorFiltered = $this->createPaginator();
     $dataSet->numberOfFilteredRecords = $paginatorFiltered->count();
     $dataSet->data = [];
     $propertyPathMappingFactory = new PropertyPathMappingFactory();
     $propertyPathMapping = $propertyPathMappingFactory->createPropertyPathMapping($this->qb, $this->columnMapping, $this->propertyPathMapping);
     foreach ($paginatorFiltered->getIterator() as $item) {
         $dataSet->data[] = $this->buildRow($item, $propertyPathMapping);
     }
     return $dataSet;
 }
示例#29
0
 /**
  * @param QueryBuilder $from
  * @param QueryBuilder $to
  */
 protected function copyParameters(QueryBuilder $from, QueryBuilder $to)
 {
     foreach ($from->getParameters() as $parameter) {
         $to->setParameter($parameter->getName(), $parameter->getValue(), $parameter->getType());
     }
 }
示例#30
0
 /**
  * @param string       $type
  * @param QueryBuilder $queryBuilder
  *
  * @return string
  */
 private function generateParameterName($type, QueryBuilder $queryBuilder)
 {
     return sprintf('%s_%d', $type, count($queryBuilder->getParameters()));
 }