/**
  * @Get("/{tableName}/", name="trinity_table_search")
  *
  * @QueryParam(name="q", nullable=false, strict=true, description="DB Query", allowBlank=true)
  *
  * @param ParamFetcher $paramFetcher
  * @param string $tableName
  *
  * @return JsonResponse
  * @throws \Doctrine\ORM\ORMException
  *
  * @throws \Trinity\Bundle\SearchBundle\Exception\SyntaxErrorException
  * @throws \Symfony\Component\HttpKernel\Exception\NotFoundHttpException
  * @throws \InvalidArgumentException
  * @throws \Exception
  *
  * @View
  */
 public function tableAction(ParamFetcher $paramFetcher, $tableName)
 {
     $queryParams = $paramFetcher->get('q');
     /** @var Search $search */
     $search = $this->get('trinity.search');
     if ($tableName === 'global') {
         if (StringUtils::isEmpty($queryParams)) {
             throw new \InvalidArgumentException('Query is empty');
         }
         return new Response($search->convertArrayToJson($search->queryGlobal($queryParams)), 200, ['Content-Type' => 'application/json']);
     } else {
         try {
             /** @var NQLQuery $nqlQuery */
             $nqlQuery = $search->queryTable($tableName, $queryParams);
             return new Response($search->convertToJson($nqlQuery, count($nqlQuery->getSelect()->getColumns())), 200, ['Content-Type' => 'application/json']);
         } catch (SyntaxErrorException $e) {
             $result = $search->queryEntity($tableName, null, null, $queryParams)->getQueryBuilder()->getQuery()->getResult();
             return new Response($search->convertArrayToJson($result));
         }
     }
 }
Esempio n. 2
0
 /**
  * Alias = null - parsed alias is used, otherwise parsed alias is used as join field
  * @param $str
  * @param null $alias
  * @return Column
  * @throws SyntaxErrorException
  */
 public static function parse($str, $alias = null)
 {
     $match = [];
     $column = trim($str);
     $wasFound = preg_match(self::$regFuncColumn, $column, $match);
     if ($wasFound) {
         $name = $match['column'];
         $alias = null === $alias ? $match['alias'] : $alias;
         $function = $match['function'];
         /** @noinspection NestedTernaryOperatorInspection */
         $joinWith = null === $alias ? $match['alias'] : StringUtils::isEmpty($match['joinWith']) ? [] : explode(':', $match['joinWith']);
         return new Column($name, $alias, $function, $joinWith);
     } else {
         throw new SyntaxErrorException("Invalid column name '{$column}'");
     }
 }
Esempio n. 3
0
 /**
  * @param string $tableName
  * @param string $queryParams
  * @return Response
  * @throws \InvalidArgumentException
  */
 protected function table($tableName, $queryParams = '')
 {
     /** @var Search $search */
     $search = $this->get('trinity.search');
     if ($tableName === 'global') {
         if (StringUtils::isEmpty($queryParams)) {
             throw new \InvalidArgumentException('Query is empty');
         }
         return $search->convertArrayToJson($search->queryGlobal($queryParams));
     } else {
         $nqlQuery = $search->queryTable($tableName, $queryParams);
         return $search->convertToJson($nqlQuery, count($nqlQuery->getSelect()->getColumns()));
     }
 }