当前位置: 首页>>代码示例>>PHP>>正文


PHP SqlWalker::getQuery方法代码示例

本文整理汇总了PHP中Doctrine\ORM\Query\SqlWalker::getQuery方法的典型用法代码示例。如果您正苦于以下问题:PHP SqlWalker::getQuery方法的具体用法?PHP SqlWalker::getQuery怎么用?PHP SqlWalker::getQuery使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Doctrine\ORM\Query\SqlWalker的用法示例。


在下文中一共展示了SqlWalker::getQuery方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。

示例1: loadConversionHints

 /**
  * @param SqlWalker $sqlWalker
  */
 protected function loadConversionHints(SqlWalker $sqlWalker)
 {
     /* @var SqlConversionInfo|\Closure $hintsValue */
     if (!($hintsValue = $sqlWalker->getQuery()->getHint('rws_conversion_hint'))) {
         throw new \LogicException('Missing "rws_conversion_hint" hint for ' . get_class($this));
     }
     if ($hintsValue instanceof SqlConversionInfo) {
         $this->nativePlatform = $hintsValue->nativePlatform;
         $this->parameters = $hintsValue->parameters;
     } else {
         list($this->nativePlatform, $this->parameters) = $hintsValue();
     }
 }
开发者ID:rollerworks,项目名称:search-doctrine-orm,代码行数:16,代码来源:ConversionHintTrait.php

示例2: __construct

 /**
  * Initializes a new <tt>MultiTableUpdateExecutor</tt>.
  *
  * @param \Doctrine\ORM\Query\AST\Node  $AST The root AST node of the DQL query.
  * @param \Doctrine\ORM\Query\SqlWalker $sqlWalker The walker used for SQL generation from the AST.
  *
  * @internal Any SQL construction and preparation takes place in the constructor for
  *           best performance. With a query cache the executor will be cached.
  */
 public function __construct(AST\Node $AST, $sqlWalker)
 {
     $em = $sqlWalker->getEntityManager();
     $conn = $em->getConnection();
     $platform = $conn->getDatabasePlatform();
     $quoteStrategy = $em->getConfiguration()->getQuoteStrategy();
     $updateClause = $AST->updateClause;
     $primaryClass = $sqlWalker->getEntityManager()->getClassMetadata($updateClause->abstractSchemaName);
     $rootClass = $em->getClassMetadata($primaryClass->rootEntityName);
     $updateItems = $updateClause->updateItems;
     $tempTable = $platform->getTemporaryTableName($rootClass->getTemporaryIdTableName());
     $idColumnNames = $rootClass->getIdentifierColumnNames();
     $idColumnList = implode(', ', $idColumnNames);
     // 1. Create an INSERT INTO temptable ... SELECT identifiers WHERE $AST->getWhereClause()
     $sqlWalker->setSQLTableAlias($primaryClass->getTableName(), 't0', $updateClause->aliasIdentificationVariable);
     $this->_insertSql = 'INSERT INTO ' . $tempTable . ' (' . $idColumnList . ')' . ' SELECT t0.' . implode(', t0.', $idColumnNames);
     $rangeDecl = new AST\RangeVariableDeclaration($primaryClass->name, $updateClause->aliasIdentificationVariable);
     $fromClause = new AST\FromClause(array(new AST\IdentificationVariableDeclaration($rangeDecl, null, array())));
     $this->_insertSql .= $sqlWalker->walkFromClause($fromClause);
     // 2. Create ID subselect statement used in UPDATE ... WHERE ... IN (subselect)
     $idSubselect = 'SELECT ' . $idColumnList . ' FROM ' . $tempTable;
     // 3. Create and store UPDATE statements
     $classNames = array_merge($primaryClass->parentClasses, array($primaryClass->name), $primaryClass->subClasses);
     $i = -1;
     foreach (array_reverse($classNames) as $className) {
         $affected = false;
         $class = $em->getClassMetadata($className);
         $updateSql = 'UPDATE ' . $quoteStrategy->getTableName($class, $platform) . ' SET ';
         foreach ($updateItems as $updateItem) {
             $field = $updateItem->pathExpression->field;
             if (isset($class->fieldMappings[$field]) && !isset($class->fieldMappings[$field]['inherited']) || isset($class->associationMappings[$field]) && !isset($class->associationMappings[$field]['inherited'])) {
                 $newValue = $updateItem->newValue;
                 if (!$affected) {
                     $affected = true;
                     ++$i;
                 } else {
                     $updateSql .= ', ';
                 }
                 $updateSql .= $sqlWalker->walkUpdateItem($updateItem);
                 //FIXME: parameters can be more deeply nested. traverse the tree.
                 //FIXME (URGENT): With query cache the parameter is out of date. Move to execute() stage.
                 if ($newValue instanceof AST\InputParameter) {
                     $parameterName = $newValue->name;
                     $parameter = $sqlWalker->getQuery()->getParameter($parameterName);
                     $value = $sqlWalker->getQuery()->processParameterValue($parameter->getValue());
                     $type = $parameter->getValue() === $value ? $parameter->getType() : ParameterTypeInferer::inferType($value);
                     $this->_sqlParameters[$i]['parameters'][] = $value;
                     $this->_sqlParameters[$i]['types'][] = $type;
                     ++$this->_numParametersInUpdateClause;
                 }
             }
         }
         if ($affected) {
             $this->_sqlStatements[$i] = $updateSql . ' WHERE (' . $idColumnList . ') IN (' . $idSubselect . ')';
         }
     }
     // Append WHERE clause to insertSql, if there is one.
     if ($AST->whereClause) {
         $this->_insertSql .= $sqlWalker->walkWhereClause($AST->whereClause);
     }
     // 4. Store DDL for temporary identifier table.
     $columnDefinitions = array();
     foreach ($idColumnNames as $idColumnName) {
         $columnDefinitions[$idColumnName] = array('notnull' => true, 'type' => Type::getType($rootClass->getTypeOfColumn($idColumnName)));
     }
     $this->_createTempTableSql = $platform->getCreateTemporaryTableSnippetSQL() . ' ' . $tempTable . ' (' . $platform->getColumnDeclarationListSQL($columnDefinitions) . ')';
     $this->_dropTempTableSql = $platform->getDropTemporaryTableSQL($tempTable);
 }
开发者ID:nemekzg,项目名称:doctrine2,代码行数:77,代码来源:MultiTableUpdateExecutor.php


注:本文中的Doctrine\ORM\Query\SqlWalker::getQuery方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。