Exemplo n.º 1
0
 /**
  * @param QueryBuilder|NativeQueryBuilder $query
  * @param array $args
  * @return array
  */
 public static function separateParameters($query, array $args)
 {
     for ($i = 0; array_key_exists($i, $args) && array_key_exists($i + 1, $args) && ($arg = $args[$i]); $i++) {
         if (!preg_match_all('~((\\:|\\?)(?P<name>[a-z0-9_]+))(?=(?:\\z|\\s|\\)))~i', $arg, $m)) {
             continue;
         }
         $repeatedArgs = [];
         foreach ($m['name'] as $l => $name) {
             if (isset($repeatedArgs[$name])) {
                 continue;
             }
             $value = $args[++$i];
             $type = NULL;
             if ($value instanceof \DateTime || $value instanceof \DateTimeImmutable) {
                 $type = Type::DATETIME;
             } elseif (is_array($value)) {
                 $type = Connection::PARAM_STR_ARRAY;
             }
             $query->setParameter($name, $value, $type);
             $repeatedArgs[$name] = TRUE;
             unset($args[$i]);
         }
     }
     return $args;
 }
Exemplo n.º 2
0
 /**
  * {@inheritdoc}
  * @return InlineParamsBuilder
  */
 public function leftJoin($join, $alias, $conditionType = NULL, $condition = NULL, $indexBy = NULL)
 {
     if ($condition !== NULL) {
         $beforeArgs = array_slice(func_get_args(), 3);
         $args = array_values(Helpers::separateParameters($this, $beforeArgs));
         if (count($beforeArgs) > count($args)) {
             $indexBy = count($args) === 2 ? $args[1] : NULL;
             $condition = $args[0];
         }
     }
     return parent::leftJoin($join, $alias, $conditionType, $condition, $indexBy);
 }
Exemplo n.º 3
0
 /**
  * @param \Kdyby\Doctrine\QueryBuilder $qb
  * @return $this
  */
 protected function applySelectFilters(QueryBuilder $qb)
 {
     if (count($this->selects) > 0) {
         $selects = $this->selects;
         $_selects = [];
         foreach ($selects as $alias => &$columns) {
             $columns = array_unique($columns);
             $columns = implode(',', $columns);
             $_selects[] = 'partial ' . $alias . '.{' . $columns . '}';
         }
         $qb->select(implode(', ', $_selects));
     }
     foreach ($this->selectFilters as $modifier) {
         $modifier($qb);
     }
     return $this;
 }
Exemplo n.º 4
0
 private function addOtherHours(QueryBuilder $qb)
 {
     $qb->addSelect('SEC_TO_TIME(SUM(TIME_TO_SEC(wh.otherHours))) AS other_hours');
 }
Exemplo n.º 5
0
 /**
  * @param array $order_arr
  * @param QueryBuilder $query
  */
 public function createOrders($order_arr, $query)
 {
     foreach ($order_arr as $by => $dir) {
         $query->addOrderBy($by, $dir);
     }
 }
Exemplo n.º 6
0
 /**
  * @param \Kdyby\Doctrine\QueryBuilder|\Kdyby\Doctrine\NativeQueryBuilder $qb
  * @param \Carrooi\NoGrid\Condition $condition
  * @throws \Carrooi\NoGrid\NotImplementedException
  */
 public static function makeWhere($qb, Condition $condition)
 {
     if (!$qb instanceof QueryBuilder && !$qb instanceof NativeQueryBuilder) {
         throw new InvalidArgumentException();
     }
     $column = $condition->getColumn();
     $value = $condition->getValue();
     if (!Strings::contains($column, '.')) {
         $column = current($qb->getRootAliases()) . '.' . $column;
     }
     $parameter = ':grid' . self::$parametersCount;
     $options = $condition->getOptions();
     $lower = isset($options[Condition::CASE_INSENSITIVE]) && $options[Condition::CASE_INSENSITIVE];
     if ($lower) {
         $column = 'lower(' . $column . ')';
         $parameter = 'lower(' . $parameter . ')';
     }
     if ($condition->getType() === Condition::SAME) {
         $qb->andWhere($column . ' = ' . $parameter);
     } elseif ($condition->getType() === Condition::NOT_SAME) {
         $qb->andWhere($column . ' != ' . $parameter);
     } elseif ($condition->getType() === Condition::IS_NULL) {
         $qb->andWhere($column . ' IS NULL');
     } elseif ($condition->getType() === Condition::IS_NOT_NULL) {
         $qb->andWhere($column . ' IS NOT NULL');
     } elseif ($condition->getType() === Condition::LIKE) {
         $qb->andWhere($column . ' LIKE ' . $parameter);
     } else {
         throw new NotImplementedException('Filtering condition is not implemented.');
     }
     if (!in_array($condition->getType(), [Condition::IS_NULL, Condition::IS_NOT_NULL])) {
         $qb->setParameter('grid' . self::$parametersCount, $value);
     }
     self::$parametersCount++;
 }
Exemplo n.º 7
0
 /**
  * @param int $offset
  * @param int $limit
  */
 public function limit($offset, $limit)
 {
     $this->qb->setFirstResult($offset)->setMaxResults($limit);
 }
Exemplo n.º 8
0
 /**
  * @param \Kdyby\Doctrine\QueryBuilder $qb
  * @return $this
  */
 protected function applySelectFilters(QueryBuilder $qb)
 {
     if (count($this->selects) > 0) {
         $selects = [];
         foreach ($this->selects as $alias => $data) {
             $columns = array_unique($data['columns']);
             $distinct = $data['distinct'] ? 'DISTINCT ' : '';
             if (empty($columns)) {
                 $selects[] = $distinct . $alias;
             } else {
                 $partial = [];
                 foreach ($columns as $column => $columnAlias) {
                     if (is_int($column)) {
                         $partial[] = $columnAlias;
                     } else {
                         $selects[] = $distinct . $alias . '.' . $column . ' AS ' . $columnAlias;
                     }
                 }
                 if (!empty($partial)) {
                     if (!in_array('id', $partial)) {
                         array_unshift($partial, 'id');
                     }
                     $partial = implode(',', $partial);
                     $selects[] = $distinct . 'PARTIAL ' . $alias . '.{' . $partial . '}' . ($data['alias'] !== null ? ' AS ' . $data['alias'] : '');
                 }
             }
         }
         $qb->select(implode(', ', $selects));
     }
     foreach ($this->selectFilters as $modifier) {
         $modifier($qb);
     }
     return $this;
 }
Exemplo n.º 9
0
 /**
  * @param  QueryBuilder $qb
  * @param  int          $page
  * @param  int          $limit
  */
 protected function preparePagination(QueryBuilder $qb, $page, $limit)
 {
     $qb->setFirstResult($page * $limit - $limit)->setMaxResults($limit);
 }
 /**
  * @param Kdyby\Persistence\Queryable $repository
  * @return \Doctrine\ORM\Query|\Doctrine\ORM\QueryBuilder
  */
 protected function doCreateCountQuery(Kdyby\Persistence\Queryable $repository)
 {
     $this->queryBuilder->resetDQLParts(['select', 'orderBy', 'join'])->select('COUNT(rm.id) as total_count');
     return $this->queryBuilder;
 }
Exemplo n.º 11
0
 /**
  * @param EntityManager
  * @param ISortableScope
  * @param QueryBuilder
  */
 private function addScope(EntityManager $em, ISortableScope $sortable, QueryBuilder $qb)
 {
     $meta = $em->getClassMetadata(get_class($sortable));
     $rc = new \ReflectionClass($sortable);
     foreach ($sortable->getSortableScope() as $field) {
         if ($meta->hasField($field) || $meta->hasAssociation($field)) {
             $rp = $rc->getProperty($field);
             $rp->setAccessible(TRUE);
             $qb->andWhere($qb->expr()->eq('e.' . $field, ':p_' . $field));
             $qb->setParameter('p_' . $field, $rp->getValue($sortable));
         } elseif ($meta->discriminatorColumn['name'] === $field) {
             if (($type = array_search(get_class($sortable), $meta->discriminatorMap)) === FALSE) {
                 $type = get_class($sortable);
             }
             $qb->andWhere('e INSTANCE OF :discr_type')->setParameter('discr_type', $type);
         } else {
             throw new InvalidScopeException("Scope field {$field} is neither field, association nor discriminator");
         }
     }
 }