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