/** * @param RedBeanModelJoinTablesQueryAdapter $joinTablesAdapter * @return null|string */ protected function makeFiltersContent(RedBeanModelJoinTablesQueryAdapter $joinTablesAdapter) { $filters = $this->report->getFilters(); $filtersStructure = $this->report->getFiltersStructure(); $resolvedFilters = $this->resolveFiltersForVariableStates($filters, $filtersStructure); $resolvedFilters = $this->resolveFiltersForReadPermissions($resolvedFilters, $filtersStructure); $builder = new FiltersReportQueryBuilder($joinTablesAdapter, $filtersStructure); return $builder->makeQueryContent($resolvedFilters); }
public function testCreatedDateTimeFilterWithInferredRelationModelAttributeAsDisplay() { $q = DatabaseCompatibilityUtil::getQuote(); $selectQueryAdapter = new RedBeanModelSelectQueryAdapter(); $joinTablesAdapter = new RedBeanModelJoinTablesQueryAdapter('Meeting'); $builder = new DisplayAttributesReportQueryBuilder($joinTablesAdapter, $selectQueryAdapter, Report::CURRENCY_CONVERSION_TYPE_ACTUAL); $displayAttribute = new DisplayAttributeForReportForm('MeetingsModule', 'Meeting', Report::TYPE_ROWS_AND_COLUMNS); $displayAttribute->attributeIndexOrDerivedType = 'Account__activityItems__Inferred___name'; $builder->makeQueryContent(array($displayAttribute)); $builder = new FiltersReportQueryBuilder($joinTablesAdapter, '1'); $filter = new FilterForReportForm('MeetingsModule', 'Meeting', Report::TYPE_ROWS_AND_COLUMNS); $filter->attributeIndexOrDerivedType = 'createdDateTime'; $filter->valueType = MixedDateTypesSearchFormAttributeMappingRules::TYPE_BETWEEN; $filter->value = '1991-05-05'; $filter->secondValue = '1991-06-05'; $filter->availableAtRunTime = true; $content = $builder->makeQueryContent(array($filter)); $compareContent = "((({$q}item1{$q}.{$q}createddatetime{$q} >= '1991-05-05 00:00:00') " . "and ({$q}item1{$q}.{$q}createddatetime{$q} <= '1991-06-05 23:59:59')))"; $this->assertEquals($compareContent, $content); $this->assertEquals(4, $joinTablesAdapter->getFromTableJoinCount()); $this->assertEquals(5, $joinTablesAdapter->getLeftTableJoinCount()); $builder = new FiltersReportQueryBuilder($joinTablesAdapter, 'not 1'); $content = $builder->makeQueryContent(array($filter)); $compareContent = "(not (({$q}item1{$q}.{$q}createddatetime{$q} >= '1991-05-05 00:00:00') " . "and ({$q}item1{$q}.{$q}createddatetime{$q} <= '1991-06-05 23:59:59')))"; $this->assertEquals($compareContent, $content); }
public function testInferredRelationModelAttributeWithCastingHintToNotCastDownSoFarWithItemAttribute() { $q = DatabaseCompatibilityUtil::getQuote(); $joinTablesAdapter = new RedBeanModelJoinTablesQueryAdapter('Meeting'); $builder = new FiltersReportQueryBuilder($joinTablesAdapter, '1'); $filter = new FilterForReportForm('MeetingsModule', 'Meeting', Report::TYPE_ROWS_AND_COLUMNS); $filter->attributeIndexOrDerivedType = 'Account__activityItems__Inferred___ReadOptimization'; $content = $builder->makeQueryContent(array($filter)); $compareContent = "({$q}ownedsecurableitem{$q}.{$q}securableitem_id{$q} = (select securableitem_id " . "from {$q}account_read{$q} where {$q}securableitem_id{$q} = {$q}ownedsecurableitem" . "{$q}.{$q}securableitem_id{$q} and {$q}munge_id{$q} in ('U" . self::$superUserId . "', 'G" . self::$everyoneGroupId . "') limit 1))"; $this->assertEquals($compareContent, $content); $this->assertEquals(1, $joinTablesAdapter->getFromTableJoinCount()); $this->assertEquals(4, $joinTablesAdapter->getLeftTableJoinCount()); }
/** * Tag cloud should utilize a sub-query as part of its query. */ public function testASingleTagCloudAttributeWithEqualsOperator() { $q = DatabaseCompatibilityUtil::getQuote(); $joinTablesAdapter = new RedBeanModelJoinTablesQueryAdapter('ReportModelTestItem'); $builder = new FiltersReportQueryBuilder($joinTablesAdapter, '1'); $filter = new FilterForReportForm('ReportsTestModule', 'ReportModelTestItem', Report::TYPE_ROWS_AND_COLUMNS); $filter->attributeIndexOrDerivedType = 'tagCloud'; $filter->value = 'a'; $filter->operator = OperatorRules::TYPE_EQUALS; $content = $builder->makeQueryContent(array($filter)); $leftTablesAndAliases = $joinTablesAdapter->getLeftTablesAndAliases(); $fromTablesAndAliases = $joinTablesAdapter->getFromTablesAndAliases(); $compareContent = "((1 = (select 1 from {$q}customfieldvalue{$q} customfieldvalue where " . "{$q}customfieldvalue{$q}.{$q}multiplevaluescustomfield_id{$q} = {$q}" . "multiplevaluescustomfield{$q}.id and {$q}customfieldvalue{$q}.{$q}value{$q}" . " = 'a' limit 1)))"; $this->assertEquals($compareContent, $content); $this->assertEquals(0, $joinTablesAdapter->getFromTableJoinCount()); $this->assertEquals(1, $joinTablesAdapter->getLeftTableJoinCount()); $this->assertEquals('multiplevaluescustomfield', $leftTablesAndAliases[0]['tableAliasName']); $this->assertEquals('reportmodeltestitem', $leftTablesAndAliases[0]['onTableAliasName']); }