Esempio n. 1
0
 /**
  * Walks down a FromClause AST node, thereby generating the appropriate SQL.
  *
  * @return string The SQL.
  */
 public function walkFromClause($fromClause)
 {
     $identificationVarDecls = $fromClause->identificationVariableDeclarations;
     $sqlParts = array();
     foreach ($identificationVarDecls as $identificationVariableDecl) {
         $sql = '';
         $rangeDecl = $identificationVariableDecl->rangeVariableDeclaration;
         $dqlAlias = $rangeDecl->aliasIdentificationVariable;
         $this->_rootAliases[] = $dqlAlias;
         $class = $this->_em->getClassMetadata($rangeDecl->abstractSchemaName);
         $sql .= $class->getQuotedTableName($this->_platform) . ' ' . $this->getSQLTableAlias($class->getTableName(), $dqlAlias);
         if ($class->isInheritanceTypeJoined()) {
             $sql .= $this->_generateClassTableInheritanceJoins($class, $dqlAlias);
         }
         foreach ($identificationVariableDecl->joinVariableDeclarations as $joinVarDecl) {
             $sql .= $this->walkJoinVariableDeclaration($joinVarDecl);
         }
         if ($identificationVariableDecl->indexBy) {
             $alias = $identificationVariableDecl->indexBy->simpleStateFieldPathExpression->identificationVariable;
             $field = $identificationVariableDecl->indexBy->simpleStateFieldPathExpression->field;
             if (isset($this->_scalarFields[$alias][$field])) {
                 $this->_rsm->addIndexByScalar($this->_scalarFields[$alias][$field]);
             } else {
                 $this->_rsm->addIndexBy($identificationVariableDecl->indexBy->simpleStateFieldPathExpression->identificationVariable, $identificationVariableDecl->indexBy->simpleStateFieldPathExpression->field);
             }
         }
         $sqlParts[] = $this->_platform->appendLockHint($sql, $this->_query->getHint(Query::HINT_LOCK_MODE));
     }
     return ' FROM ' . implode(', ', $sqlParts);
 }
Esempio n. 2
0
    /**
     * {@inheritdoc}
     */
    public function walkFromClause($fromClause)
    {
        $identificationVarDecls = $fromClause->identificationVariableDeclarations;
        $sqlParts = array();

        foreach ($identificationVarDecls as $identificationVariableDecl) {
            $sql = $this->platform->appendLockHint(
                $this->walkRangeVariableDeclaration($identificationVariableDecl->rangeVariableDeclaration),
                $this->query->getHint(Query::HINT_LOCK_MODE)
            );

            foreach ($identificationVariableDecl->joins as $join) {
                $sql .= $this->walkJoin($join);
            }

            if ($identificationVariableDecl->indexBy) {
                $alias = $identificationVariableDecl->indexBy->simpleStateFieldPathExpression->identificationVariable;
                $field = $identificationVariableDecl->indexBy->simpleStateFieldPathExpression->field;

                if (isset($this->scalarFields[$alias][$field])) {
                    $this->rsm->addIndexByScalar($this->scalarFields[$alias][$field]);
                } else {
                    $this->rsm->addIndexBy(
                        $identificationVariableDecl->indexBy->simpleStateFieldPathExpression->identificationVariable,
                        $identificationVariableDecl->indexBy->simpleStateFieldPathExpression->field
                    );
                }
            }

            $sqlParts[] = $sql;
        }

        return ' FROM ' . implode(', ', $sqlParts);
    }
Esempio n. 3
0
 /**
  * Walks down a IndexBy AST node.
  *
  * @param AST\IndexBy $indexBy
  *
  * @return void
  */
 public function walkIndexBy($indexBy)
 {
     $pathExpression = $indexBy->simpleStateFieldPathExpression;
     $alias = $pathExpression->identificationVariable;
     $field = $pathExpression->field;
     if (isset($this->scalarFields[$alias][$field])) {
         $this->rsm->addIndexByScalar($this->scalarFields[$alias][$field]);
         return;
     }
     $this->rsm->addIndexBy($alias, $field);
 }
Esempio n. 4
0
 /**
  * SELECT UPPER(u.name) AS nameUpper
  *   FROM Doctrine\Tests\Models\CMS\CmsUser u
  *
  * @group DDC-1385
  * @dataProvider provideDataForUserEntityResult
  */
 public function testIndexByScalarsOnly($userEntityKey)
 {
     $rsm = new ResultSetMapping();
     $rsm->addEntityResult('Doctrine\\Tests\\Models\\CMS\\CmsUser', 'u', $userEntityKey ?: null);
     $rsm->addScalarResult('sclr0', 'nameUpper');
     $rsm->addIndexByScalar('sclr0');
     // Faked result set
     $resultSet = array(array('sclr0' => 'ROMANB'), array('sclr0' => 'JWAGE'));
     $stmt = new HydratorMockStatement($resultSet);
     $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->_em);
     $result = $hydrator->hydrateAll($stmt, $rsm, array(Query::HINT_FORCE_PARTIAL_LOAD => true));
     $this->assertEquals(array('ROMANB' => array('nameUpper' => 'ROMANB'), 'JWAGE' => array('nameUpper' => 'JWAGE')), $result);
 }