Пример #1
0
 /**
  * @param $parameters
  * @param $column
  * @param $value
  * @param $config_type
  */
 private function prepareParameterConfiguration(&$parameters, $column, $value, $config_type)
 {
     switch ($config_type) {
         case "range":
             $conditions[] = data_controller_get_operator_factory_instance()->initiateHandler(RangeOperatorHandler::$OPERATOR__NAME, array($value[0], $value[1]));
             $parameters[$column] = $conditions;
             break;
         case "like":
             $parameters[$column] = data_controller_get_operator_factory_instance()->initiateHandler(WildcardOperatorHandler::$OPERATOR__NAME, array($value, FALSE, TRUE));
             break;
         case "trueLike":
             $parameters[$column] = data_controller_get_operator_factory_instance()->initiateHandler(WildcardOperatorHandler::$OPERATOR__NAME, array($value, TRUE, TRUE));
             break;
         case "contains":
             $pattern = "(.* {$value} .*)|(.* {$value}\$)|(^{$value}.*)|(.* {$value}.*)";
             $parameters[$column] = data_controller_get_operator_factory_instance()->initiateHandler(RegularExpressionOperatorHandler::$OPERATOR__NAME, $pattern);
             break;
         default:
             $parameters[$column] = $value;
             break;
     }
 }
 protected function loadNextRecord(DataControllerCallContext $callcontext)
 {
     // checking if the record could be retrieved from cache
     if (isset($this->requestedRecordCount) && $this->requestedRecordCount > $this->processedRecordIndex + 1) {
         // the value is possibly in cache. That depends on number of records we were able to load
         $this->processedRecordIndex++;
     } else {
         $this->processedRecordIndex = 0;
         // loading data from database
         $this->requestedRecordCount = self::$PRELOADED_RECORD_COUNT;
         $request = clone $this->request;
         $request->setPagination($this->requestedRecordCount, 0);
         // adding condition for the value column
         if (isset($this->lastOccurenceValue)) {
             $request->addQueryValue(0, $this->columnName, data_controller_get_operator_factory_instance()->initiateHandler(LessThanOperatorHandler::$OPERATOR__NAME, $this->lastOccurenceValue));
         }
         $this->loadedRecords = $this->datasourceHandler->queryDataset($callcontext, $request, new PassthroughResultFormatter());
     }
     return isset($this->loadedRecords[$this->processedRecordIndex]) ? $this->loadedRecords[$this->processedRecordIndex] : NULL;
 }
 protected function selectBoundary4CubeRequest(DataControllerCallContext $callcontext, CubeQueryRequest $request, $datasetName, $columnName)
 {
     $isSortAscending = $this->isSortAscending();
     $resultColumnName = NULL;
     // preparing new cube meta data
     $expressionRequest = new CubeQueryRequest($request->getCubeName());
     // copying ONLY some query objects (excluding at least a reference to this operator)
     // -- dimension queries
     $dimensionQueries = $request->findDimensionQueries();
     if (isset($dimensionQueries)) {
         foreach ($dimensionQueries as $query) {
             foreach ($query->values as $propertyValue) {
                 foreach ($propertyValue->values as $value) {
                     if ($value->isSubsetBased()) {
                         // skipping other instances which are based on subset of data if their weight is greater than of this operator
                         if (isset($value->weight) && $value->weight > $this->operatorHandler->weight) {
                             continue;
                         }
                     }
                     // updating request configuration for the value supported by this class
                     if ($this->operatorHandler === $value) {
                         $resultColumnName = ParameterHelper::assembleParameterName($query->dimensionName, $query->levelName, $propertyValue->name);
                         // returning only observing property of the dimension level
                         $expressionRequest->addDimensionLevelProperty(0, $query->dimensionName, $query->levelName, $propertyValue->name);
                         // ... and excluding NULL values from evaluation
                         $expressionRequest->addDimensionLevelPropertyQueryValue($query->dimensionName, $query->levelName, $propertyValue->name, data_controller_get_operator_factory_instance()->initiateHandler(NotEqualOperatorHandler::$OPERATOR__NAME, NULL));
                         // sorting data
                         $expressionRequest->addOrderByColumn(PropertyBasedComparator_DefaultSortingConfiguration::assembleDirectionalPropertyName($resultColumnName, $isSortAscending));
                     } else {
                         $expressionRequest->addDimensionLevelPropertyQueryValue($query->dimensionName, $query->levelName, $propertyValue->name, $value);
                     }
                 }
             }
         }
     }
     // -- source dataset property queries
     $sourceDatasetPropertyQueries = $request->findSourceDatasetPropertyQueries();
     if (isset($sourceDatasetPropertyQueries)) {
         foreach ($sourceDatasetPropertyQueries as $query) {
             foreach ($query->values as $value) {
                 if ($value->isSubsetBased()) {
                     throw new UnsupportedOperationException(t('Boundary-related operator cannot filter cube source dataset property values yet'));
                 }
             }
             $expressionRequest->queries[] = clone $query;
         }
     }
     // -- measure queries
     $measureQueries = $request->findMeasureQueries();
     if (isset($measureQueries)) {
         foreach ($measureQueries as $query) {
             foreach ($query->values as $value) {
                 if ($value->isSubsetBased()) {
                     throw new UnsupportedOperationException(t('Boundary-related operator cannot filter measure values yet'));
                 }
             }
             $expressionRequest->queries[] = clone $query;
         }
     }
     // limiting response to one record
     $expressionRequest->setPagination(1, 0);
     return $this->processCubeExpressionRequest($callcontext, $expressionRequest, $resultColumnName);
 }