From 589a4a266c42f01c9ec9fbc4c20eae59551d2f24 Mon Sep 17 00:00:00 2001 From: Sergey Zhuravel Date: Mon, 19 Jan 2015 23:49:20 +0200 Subject: [PATCH] CRM-2390: Unnecessary join for Marketing Lists in Reports functionality - support select field name --- .../Provider/ChainVirtualRelationProvider.php | 8 ++++++-- .../Provider/ConfigVirtualRelationProvider.php | 2 +- .../Provider/VirtualRelationProviderInterface.php | 7 ++++--- .../QueryDesigner/AbstractQueryConverter.php | 11 +++++++---- 4 files changed, 18 insertions(+), 10 deletions(-) diff --git a/src/Oro/Bundle/EntityBundle/Provider/ChainVirtualRelationProvider.php b/src/Oro/Bundle/EntityBundle/Provider/ChainVirtualRelationProvider.php index 7f8ecd07281..a91c10b3679 100644 --- a/src/Oro/Bundle/EntityBundle/Provider/ChainVirtualRelationProvider.php +++ b/src/Oro/Bundle/EntityBundle/Provider/ChainVirtualRelationProvider.php @@ -50,9 +50,13 @@ public function getVirtualRelations($className) /** * {@inheritdoc} */ - public function getTargetJoinAlias($className, $fieldName) + public function getTargetJoinAlias($className, $fieldName, $selectFieldName = null) { - return $this->findProvider($className, $fieldName)->getTargetJoinAlias($className, $fieldName); + return $this->findProvider($className, $fieldName)->getTargetJoinAlias( + $className, + $fieldName, + $selectFieldName + ); } /** diff --git a/src/Oro/Bundle/EntityBundle/Provider/ConfigVirtualRelationProvider.php b/src/Oro/Bundle/EntityBundle/Provider/ConfigVirtualRelationProvider.php index c7d04c9e792..7aa5132250d 100644 --- a/src/Oro/Bundle/EntityBundle/Provider/ConfigVirtualRelationProvider.php +++ b/src/Oro/Bundle/EntityBundle/Provider/ConfigVirtualRelationProvider.php @@ -50,7 +50,7 @@ public function getVirtualRelations($className) * * {@inheritdoc} */ - public function getTargetJoinAlias($className, $fieldName) + public function getTargetJoinAlias($className, $fieldName, $selectFieldName = null) { if (!$this->isVirtualRelation($className, $fieldName)) { throw new \InvalidArgumentException( diff --git a/src/Oro/Bundle/EntityBundle/Provider/VirtualRelationProviderInterface.php b/src/Oro/Bundle/EntityBundle/Provider/VirtualRelationProviderInterface.php index 23774f0d261..ff7d37f57c6 100644 --- a/src/Oro/Bundle/EntityBundle/Provider/VirtualRelationProviderInterface.php +++ b/src/Oro/Bundle/EntityBundle/Provider/VirtualRelationProviderInterface.php @@ -33,9 +33,10 @@ public function getVirtualRelations($className); /** * Gets a target alias * - * @param string $className - * @param string $fieldName + * @param string $className + * @param string $fieldName + * @param string|null $selectFieldName * @return string */ - public function getTargetJoinAlias($className, $fieldName); + public function getTargetJoinAlias($className, $fieldName, $selectFieldName = null); } diff --git a/src/Oro/Bundle/QueryDesignerBundle/QueryDesigner/AbstractQueryConverter.php b/src/Oro/Bundle/QueryDesignerBundle/QueryDesigner/AbstractQueryConverter.php index aaed8c7e526..9baeef68cad 100644 --- a/src/Oro/Bundle/QueryDesignerBundle/QueryDesigner/AbstractQueryConverter.php +++ b/src/Oro/Bundle/QueryDesignerBundle/QueryDesigner/AbstractQueryConverter.php @@ -522,7 +522,8 @@ protected function addJoinStatements() $joinTableAlias = $this->aliases[$this->virtualRelationProvider->getTargetJoinAlias( $className, - $fieldName + $fieldName, + $this->getFieldName($joinId) )]; } @@ -1041,7 +1042,11 @@ protected function addColumnAliasesForVirtualRelation($columnName, array $joinId $className = $this->getEntityClassName($parentJoinId); if ($this->virtualRelationProvider->isVirtualRelation($className, $fieldName)) { - $tableAlias = $this->aliases[$this->virtualRelationProvider->getTargetJoinAlias($className, $fieldName)]; + $tableAlias = $this->aliases[$this->virtualRelationProvider->getTargetJoinAlias( + $className, + $fieldName, + $this->getFieldName($columnName) + )]; } else { $joinId = end($joinIds); $tableAlias = $this->tableAliases[$joinId]; @@ -1367,8 +1372,6 @@ protected function checkTableAliasInSelect($selectExpr, $alias) * @param string $alias * @param int $offset * - * @todo: use QueryBuilderTools instead - * * @return bool|int The position of $alias in $condition or FALSE if it was not found */ protected function checkTableAliasInCondition($condition, $alias, $offset = 0)