/** * constructor * @param string $column_name * @param string $alias * @param bool $click_count * @return void */ function ClickCountExpression($column_name, $alias = NULL, $click_count = false) { parent::SelectExpression($column_name, $alias); if (!is_bool($click_count)) { // error_log("Click_count value for $column_name was not boolean", 0); $this->click_count = false; } $this->click_count = $click_count; }
/** * constructor * @param string $column_name * @param string $alias * @param bool $click_count * @return void */ function __construct($column_name, $alias = NULL, $click_count = false) { parent::__construct($column_name, $alias); if (!is_bool($click_count)) { // error_log("Click_count value for $column_name was not boolean", 0); $this->click_count = false; } $this->click_count = $click_count; }
/** * constructor, set the column to asterisk * @return void */ function StarExpression() { parent::SelectExpression("*"); }
/** * constructor, set the column to asterisk * @return void */ function __construct() { parent::__construct("*"); }
/** * Walks down a SelectExpression AST node and generates the corresponding SQL. * * @param SelectExpression $selectExpression * @return string The SQL. */ public function walkSelectExpression($selectExpression) { $sql = ''; $expr = $selectExpression->getExpression(); if ($expr instanceof AST\StateFieldPathExpression) { if ($expr->isSimpleStateFieldPathExpression()) { $parts = $expr->getParts(); $numParts = count($parts); $dqlAlias = $parts[0]; $fieldName = $parts[$numParts - 1]; $qComp = $this->_queryComponents[$dqlAlias]; $class = $qComp['metadata']; if (!isset($this->_selectedClasses[$dqlAlias])) { $this->_selectedClasses[$dqlAlias] = $class; } if ($numParts > 2) { for ($i = 1; $i < $numParts - 1; ++$i) { //TODO } } $sqlTableAlias = $this->getSqlTableAlias($class->getTableName() . $dqlAlias); $columnName = $class->getColumnName($fieldName); $columnAlias = $this->getSqlColumnAlias($columnName); $sql .= $sqlTableAlias . '.' . $columnName . ' AS ' . $columnAlias; $this->_resultSetMapping->addFieldResult($dqlAlias, $columnAlias, $fieldName); } else { if ($expr->isSimpleStateFieldAssociationPathExpression()) { throw DoctrineException::updateMe("Not yet implemented."); } else { throw DoctrineException::updateMe("Encountered invalid PathExpression during SQL construction."); } } } else { if ($expr instanceof AST\AggregateExpression) { if (!$selectExpression->getFieldIdentificationVariable()) { $resultAlias = $this->_scalarResultCounter++; } else { $resultAlias = $selectExpression->getFieldIdentificationVariable(); } $columnAlias = 'sclr' . $this->_aliasCounter++; $sql .= $this->walkAggregateExpression($expr) . ' AS ' . $columnAlias; $this->_resultSetMapping->addScalarResult($columnAlias, $resultAlias); } else { if ($expr instanceof AST\Subselect) { $sql .= $this->walkSubselect($expr); } else { if ($expr instanceof AST\Functions\FunctionNode) { if (!$selectExpression->getFieldIdentificationVariable()) { $resultAlias = $this->_scalarResultCounter++; } else { $resultAlias = $selectExpression->getFieldIdentificationVariable(); } $columnAlias = 'sclr' . $this->_aliasCounter++; $sql .= $this->walkFunction($expr) . ' AS ' . $columnAlias; $this->_resultSetMapping->addScalarResult($columnAlias, $resultAlias); } else { // IdentificationVariable $dqlAlias = $expr; $queryComp = $this->_queryComponents[$dqlAlias]; $class = $queryComp['metadata']; if (!isset($this->_selectedClasses[$dqlAlias])) { $this->_selectedClasses[$dqlAlias] = $class; } $beginning = true; if ($class->isInheritanceTypeJoined()) { // Select all fields from the queried class foreach ($class->fieldMappings as $fieldName => $mapping) { if (isset($mapping['inherited'])) { $tableName = $this->_em->getClassMetadata($mapping['inherited'])->primaryTable['name']; } else { $tableName = $class->primaryTable['name']; } if ($beginning) { $beginning = false; } else { $sql .= ', '; } $sqlTableAlias = $this->getSqlTableAlias($tableName . $dqlAlias); $columnAlias = $this->getSqlColumnAlias($mapping['columnName']); $sql .= $sqlTableAlias . '.' . $mapping['columnName'] . ' AS ' . $columnAlias; $this->_resultSetMapping->addFieldResult($dqlAlias, $columnAlias, $fieldName); } // Add any additional fields of subclasses (not inherited fields) foreach ($class->subClasses as $subClassName) { $subClass = $this->_em->getClassMetadata($subClassName); foreach ($subClass->fieldMappings as $fieldName => $mapping) { if (isset($mapping['inherited'])) { continue; } if ($beginning) { $beginning = false; } else { $sql .= ', '; } $sqlTableAlias = $this->getSqlTableAlias($subClass->primaryTable['name'] . $dqlAlias); $columnAlias = $this->getSqlColumnAlias($mapping['columnName']); $sql .= $sqlTableAlias . '.' . $mapping['columnName'] . ' AS ' . $columnAlias; $this->_resultSetMapping->addFieldResult($dqlAlias, $columnAlias, $fieldName); } } } else { $fieldMappings = $class->fieldMappings; foreach ($class->subClasses as $subclassName) { $fieldMappings = array_merge($fieldMappings, $this->_em->getClassMetadata($subclassName)->fieldMappings); } $sqlTableAlias = $this->getSqlTableAlias($class->getTableName() . $dqlAlias); foreach ($fieldMappings as $fieldName => $mapping) { if ($beginning) { $beginning = false; } else { $sql .= ', '; } $columnAlias = $this->getSqlColumnAlias($mapping['columnName']); $sql .= $sqlTableAlias . '.' . $mapping['columnName'] . ' AS ' . $columnAlias; $this->_resultSetMapping->addFieldResult($dqlAlias, $columnAlias, $fieldName); } } } } } } return $sql; }