/** * Build the group data query to retrieve the group data * * @param array Tx_PtExtlist_Domain_Configuration_Data_Fields_FieldConfig $fields * @return \Tx_PtExtlist_Domain_QueryObject_Query */ protected function buildGroupDataQuery($fields) { $groupDataQuery = new Tx_PtExtlist_Domain_QueryObject_Query(); foreach ($fields as $selectField) { $groupDataQuery->addField(Tx_PtExtlist_Utility_DbUtils::getAliasedSelectPartByFieldConfig($selectField)); } if ($this->additionalTables != '') { $groupDataQuery->addFrom($this->additionalTables); } $groupDataQuery->addSorting('elementCount', Tx_PtExtlist_Domain_QueryObject_Query::SORTINGSTATE_DESC); if ($this->elementCountField !== NULL) { $groupDataQuery->addField(sprintf('%s as elementCount', $this->elementCountField->getTableFieldCombined())); } else { // TODO only works with SQL! $groupDataQuery->addField(sprintf('count("%s") as elementCount', $this->filterField->getTableFieldCombined())); } $groupDataQuery->addGroupBy($this->filterConfig->getFieldIdentifier()->getItemByIndex(0)->getIdentifier()); return $groupDataQuery; }
/** * Builds select part from all parts of plugin * * @return string SELECT part of query without 'SELECT' */ public function buildSelectPart() { $selectParts = array(); foreach ($this->fieldConfigurationCollection as $fieldConfiguration) { /* @var $fieldConfiguration Tx_PtExtlist_Domain_Configuration_Data_Fields_FieldConfig */ if ($fieldConfiguration->getExpandGroupRows() && $this->baseGroupByClause) { $selectParts[] = 'group_concat(' . Tx_PtExtlist_Utility_DbUtils::getSelectPartByFieldConfig($fieldConfiguration) . ' SEPARATOR "' . $fieldConfiguration->getExpandGroupRowsSeparator() . '") AS ' . $fieldConfiguration->getIdentifier(); } else { $selectParts[] = Tx_PtExtlist_Utility_DbUtils::getAliasedSelectPartByFieldConfig($fieldConfiguration); } } return implode(', ', $selectParts); }
public function testGetAliasedSelectPartByFieldConfigSpecialString() { $fieldConfig = new Tx_PtExtlist_Domain_Configuration_Data_Fields_FieldConfig($this->configurationBuilderMock, 'test', array('field' => 'field', 'table' => 'table', 'special' => 'special')); $this->assertEquals('(special) AS test', Tx_PtExtlist_Utility_DbUtils::getAliasedSelectPartByFieldConfig($fieldConfig)); }
/** * Build the group data query to retrieve the group data * * @param array Tx_PtExtlist_Domain_Configuration_Data_Fields_FieldConfig $fields * @return Tx_PtExtlist_Domain_QueryObject_Query */ protected function buildGroupDataQuery($fields) { $groupDataQuery = new Tx_PtExtlist_Domain_QueryObject_Query(); foreach ($fields as $selectField) { $groupDataQuery->addField(Tx_PtExtlist_Utility_DbUtils::getAliasedSelectPartByFieldConfig($selectField)); } if ($this->additionalTables != '') { $groupDataQuery->addFrom($this->additionalTables); } foreach ($this->displayFields as $displayField) { /* @var $displayField Tx_PtExtlist_Domain_Configuration_Data_Fields_FieldConfig */ $groupDataQuery->addSorting($displayField->getIdentifier(), Tx_PtExtlist_Domain_QueryObject_Query::SORTINGSTATE_ASC); } if ($this->showRowCount) { // TODO only works with SQL! $groupDataQuery->addField(sprintf('count("%s") as rowCount', $this->filterField->getTableFieldCombined())); } $groupFields = array(); foreach ($this->getFieldsRequiredToBeSelected() as $field) { /* @var $field Tx_PtExtlist_Domain_Configuration_Data_Fields_FieldConfig */ $groupFields[] = $field->getIdentifier(); } $groupDataQuery->addGroupBy(implode(',', $groupFields)); return $groupDataQuery; }
/** @test */ public function buildSelectPartWithTableAndFieldReturnsExpectedString() { $pagerCollectionMock = $this->getMock('Tx_PtExtlist_Domain_Model_Pager_PagerCollection', array('setItemCount'), array(), '', false, false); $dataBackend = new Tx_PtExtlist_Domain_DataBackend_MySqlDataBackend_MySqlDataBackend($this->configurationBuilder); $dataBackend->_injectPagerCollection($pagerCollectionMock); $dataBackend->_injectQueryInterpreter(new Tx_PtExtlist_Domain_DataBackend_MySqlDataBackend_MySqlInterpreter_MySqlInterpreter()); $fieldConfigurationCollection = new Tx_PtExtlist_Domain_Configuration_Data_Fields_FieldConfigCollection(); $fieldConfigurationCollection->addItem($this->getFieldConfigMockForTableAndFieldAndIdentifier('table1', 'field1', 'test1')); $fieldConfigurationCollection->addItem($this->getFieldConfigMockForTableAndFieldAndIdentifier('table1', 'field2', 'test2')); $dataBackend->_injectFieldConfigurationCollection($fieldConfigurationCollection); $selectPartForFieldConfigurationCollection = $dataBackend->buildSelectPart(); $expectedSelectPart = Tx_PtExtlist_Utility_DbUtils::getAliasedSelectPartByFieldConfig($fieldConfigurationCollection[0]) . ', ' . Tx_PtExtlist_Utility_DbUtils::getAliasedSelectPartByFieldConfig($fieldConfigurationCollection[1]); $this->assertTrue($selectPartForFieldConfigurationCollection == $expectedSelectPart, 'Select part for field configuration collection should be "' . $expectedSelectPart . '" but was ' . $selectPartForFieldConfigurationCollection); }