/**
  * 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;
 }
Пример #2
0
 /**
  * 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;
 }
Пример #3
0
 /**
  * constructor, set the column to asterisk
  * @return void
  */
 function StarExpression()
 {
     parent::SelectExpression("*");
 }
Пример #4
0
 /**
  * constructor, set the column to asterisk
  * @return void
  */
 function __construct()
 {
     parent::__construct("*");
 }
Пример #5
0
 /**
  * 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;
 }