/** * @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)); } } }
/** * 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}'"); } }
/** * @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())); } }