public function testDisplayCalculationInferredRelationModelAttributeWithCastingHintToNotCastDowButAlsoWithFullCastDown() { $q = DatabaseCompatibilityUtil::getQuote(); $joinTablesAdapter = new RedBeanModelJoinTablesQueryAdapter('Meeting'); $selectQueryAdapter = new RedBeanModelSelectQueryAdapter(); $builder = new DisplayAttributesReportQueryBuilder($joinTablesAdapter, $selectQueryAdapter); $displayAttribute = new DisplayAttributeForReportForm('MeetingsModule', 'Meeting', Report::TYPE_SUMMATION); $displayAttribute->attributeIndexOrDerivedType = 'Account__activityItems__Inferred___createdDateTime__Maximum'; $displayAttribute2 = new DisplayAttributeForReportForm('MeetingsModule', 'Meeting', Report::TYPE_SUMMATION); $displayAttribute2->attributeIndexOrDerivedType = 'Account__activityItems__Inferred___name'; $content = $builder->makeQueryContent(array($displayAttribute, $displayAttribute2)); $compareContent = "select max({$q}item{$q}.{$q}createddatetime{$q}) col0, " . "{$q}account{$q}.{$q}id{$q} accountid "; $this->assertEquals($compareContent, $content); $leftTablesAndAliases = $joinTablesAdapter->getLeftTablesAndAliases(); $fromTablesAndAliases = $joinTablesAdapter->getFromTablesAndAliases(); $this->assertEquals(1, $joinTablesAdapter->getFromTableJoinCount()); $this->assertEquals(5, $joinTablesAdapter->getLeftTableJoinCount()); $this->assertEquals('activity_item', $leftTablesAndAliases[0]['tableAliasName']); $this->assertEquals('activity', $leftTablesAndAliases[0]['onTableAliasName']); $this->assertEquals('item', $leftTablesAndAliases[1]['tableAliasName']); $this->assertEquals('activity_item', $leftTablesAndAliases[1]['onTableAliasName']); $this->assertEquals('securableitem', $leftTablesAndAliases[2]['tableAliasName']); $this->assertEquals('item', $leftTablesAndAliases[2]['onTableAliasName']); $this->assertEquals('ownedsecurableitem', $leftTablesAndAliases[3]['tableAliasName']); $this->assertEquals('securableitem', $leftTablesAndAliases[3]['onTableAliasName']); $this->assertEquals('account', $leftTablesAndAliases[4]['tableAliasName']); $this->assertEquals('ownedsecurableitem', $leftTablesAndAliases[4]['onTableAliasName']); }
/** * 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']); $builder = new FiltersReportQueryBuilder($joinTablesAdapter, 'not 1'); $content = $builder->makeQueryContent(array($filter)); $compareContent = "(not (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); }
public function testInferredRelationModelAttributeWithCastingHintToNotCastDowButAlsoWithFullCastDown() { $q = DatabaseCompatibilityUtil::getQuote(); $joinTablesAdapter = new RedBeanModelJoinTablesQueryAdapter('Meeting'); $builder = new OrderBysReportQueryBuilder($joinTablesAdapter); $orderBy = new OrderByForReportForm('MeetingsModule', 'Meeting', Report::TYPE_ROWS_AND_COLUMNS); $orderBy->attributeIndexOrDerivedType = 'Account__activityItems__Inferred___createdDateTime'; $orderBy2 = new OrderByForReportForm('MeetingsModule', 'Meeting', Report::TYPE_ROWS_AND_COLUMNS); $orderBy2->attributeIndexOrDerivedType = 'Account__activityItems__Inferred___name'; $content = $builder->makeQueryContent(array($orderBy, $orderBy2)); $compareContent = "{$q}item{$q}.{$q}createddatetime{$q} asc, " . "{$q}account{$q}.{$q}name{$q} asc"; $this->assertEquals($compareContent, $content); $leftTablesAndAliases = $joinTablesAdapter->getLeftTablesAndAliases(); $fromTablesAndAliases = $joinTablesAdapter->getFromTablesAndAliases(); $this->assertEquals(1, $joinTablesAdapter->getFromTableJoinCount()); $this->assertEquals(5, $joinTablesAdapter->getLeftTableJoinCount()); $this->assertEquals('activity_item', $leftTablesAndAliases[0]['tableAliasName']); $this->assertEquals('activity', $leftTablesAndAliases[0]['onTableAliasName']); $this->assertEquals('item', $leftTablesAndAliases[1]['tableAliasName']); $this->assertEquals('activity_item', $leftTablesAndAliases[1]['onTableAliasName']); $this->assertEquals('securableitem', $leftTablesAndAliases[2]['tableAliasName']); $this->assertEquals('item', $leftTablesAndAliases[2]['onTableAliasName']); $this->assertEquals('ownedsecurableitem', $leftTablesAndAliases[3]['tableAliasName']); $this->assertEquals('securableitem', $leftTablesAndAliases[3]['onTableAliasName']); $this->assertEquals('account', $leftTablesAndAliases[4]['tableAliasName']); $this->assertEquals('ownedsecurableitem', $leftTablesAndAliases[4]['onTableAliasName']); }
public function testHasManyForHasManyBelongsToOnCastedUpModel() { $q = DatabaseCompatibilityUtil::getQuote(); $joinTablesAdapter = new RedBeanModelJoinTablesQueryAdapter('ReportModelTestItem9'); $builder = new GroupBysReportQueryBuilder($joinTablesAdapter); $groupBy = new GroupByForReportForm('ReportsTestModule', 'ReportModelTestItem9', Report::TYPE_SUMMATION); $groupBy->attributeIndexOrDerivedType = 'reportModelTestItem9s___owner__User'; $content = $builder->makeQueryContent(array($groupBy)); $compareContent = "{$q}_user{$q}.{$q}id{$q}"; $this->assertEquals($compareContent, $content); $leftTablesAndAliases = $joinTablesAdapter->getLeftTablesAndAliases(); $fromTablesAndAliases = $joinTablesAdapter->getFromTablesAndAliases(); $this->assertEquals(0, $joinTablesAdapter->getFromTableJoinCount()); $this->assertEquals(3, $joinTablesAdapter->getLeftTableJoinCount()); $this->assertEquals('reportmodeltestitem91', $leftTablesAndAliases[0]['tableAliasName']); $this->assertEquals('reportmodeltestitem9', $leftTablesAndAliases[0]['onTableAliasName']); $this->assertEquals('ownedsecurableitem', $leftTablesAndAliases[1]['tableAliasName']); $this->assertEquals('reportmodeltestitem91', $leftTablesAndAliases[1]['onTableAliasName']); $this->assertEquals('id', $leftTablesAndAliases[1]['tableJoinIdName']); $this->assertEquals('_user', $leftTablesAndAliases[2]['tableAliasName']); $this->assertEquals('ownedsecurableitem', $leftTablesAndAliases[2]['onTableAliasName']); }