Beispiel #1
0
 /**
  * @param QChartsSubjectInterface $user
  * @param QueryRequest $queryRequest
  * @throws DatabaseException
  */
 public function removeFavourite(QChartsSubjectInterface $user, QueryRequest $queryRequest)
 {
     try {
         $queryRequest->removeFavoritedBy($user);
         $this->queryRepository->update($queryRequest);
     } catch (\Exception $e) {
         throw new DatabaseException("Error while attempting to remove the favorite, {$e->getMessage()}", $e->getCode(), $e);
     }
 }
Beispiel #2
0
 /**
  * @param FormInterface $form
  * @param QChartsSubjectInterface $user
  * @param $queryId
  * @return array
  * @throws DatabaseException
  * @throws OffLimitsException
  * @throws ValidationFailedException
  * @throws OverlappingException
  */
 public function edit(FormInterface $form, QChartsSubjectInterface $user, $queryId)
 {
     /** @var QueryRequest $queryRequest */
     /** @var Form $form */
     $queryRequest = $form->getData();
     $query = $queryRequest->getQuery();
     $config = $queryRequest->getConfig();
     try {
         $queryRequest->setModifiedLastBy($user);
         $rawQueryString = $query->getQuery();
         $query->setQueryHTML(\SqlFormatter::format($rawQueryString));
         $this->queryValidator->isValidQuery($rawQueryString, $config->getDatabaseConnection());
         $configuration = ["rows" => $config->getQueryLimit(), "time" => $config->getExecutionLimit(), "chartType" => $config->getTypeOfChart(), "offset" => $config->getOffset(), "connection" => $config->getDatabaseConnection(), "cronExpression" => $queryRequest->getCronExpression()];
         $results = $this->queryValidator->validateQueryExecution($rawQueryString, $configuration);
         $queryRequest->setConfig($config);
         $queryRequest->setQuery($query);
         $this->repository->update($queryRequest);
         return ["query" => $queryRequest, "results" => $results];
     } catch (OffLimitsException $e) {
         // set the default values
         $limit = $this->queryValidator->getMaxRows($config->getQueryLimit());
         $config->setQueryLimit($limit);
         $offset = 0;
         $config->setOffset($offset);
         $timeLimit = $this->queryValidator->getMaxTime($config->getExecutionLimit(), $config->getDatabaseConnection());
         $config->setExecutionLimit($timeLimit);
         $queryRequest->setConfig($config);
         $queryRequest->setQuery($query);
         $this->repository->update($queryRequest);
         throw new OffLimitsException("One of the limits were off limit, their respective default value were used", 200, $e);
     } catch (ValidationFailedException $e) {
         throw $e;
     }
 }