Esempio n. 1
0
 /**
  * Lock all rows of this entity matching the given criteria with the specified pessimistic lock mode
  *
  * @param array $criteria
  * @param int $lockMode
  * @return void
  */
 public function lock(array $criteria, $lockMode)
 {
     $conditionSql = $this->_getSelectConditionSQL($criteria);
     if ($lockMode == LockMode::PESSIMISTIC_READ) {
         $lockSql = $this->_platform->getReadLockSql();
     } else {
         if ($lockMode == LockMode::PESSIMISTIC_WRITE) {
             $lockSql = $this->_platform->getWriteLockSql();
         }
     }
     $sql = 'SELECT 1 ' . $this->_platform->appendLockHint($this->getLockTablesSql(), $lockMode) . ($conditionSql ? ' WHERE ' . $conditionSql : '') . ' ' . $lockSql;
     list($params, $types) = $this->expandParameters($criteria);
     $stmt = $this->_conn->executeQuery($sql, $params, $types);
 }
Esempio n. 2
0
 /**
  * {@inheritdoc}
  */
 public function walkSubselectFromClause($subselectFromClause)
 {
     $identificationVarDecls = $subselectFromClause->identificationVariableDeclarations;
     $sqlParts = array();
     foreach ($identificationVarDecls as $subselectIdVarDecl) {
         $sql = $this->walkRangeVariableDeclaration($subselectIdVarDecl->rangeVariableDeclaration);
         foreach ($subselectIdVarDecl->joins as $join) {
             $sql .= $this->walkJoin($join);
         }
         $sqlParts[] = $this->platform->appendLockHint($sql, $this->query->getHint(Query::HINT_LOCK_MODE));
     }
     return ' FROM ' . implode(', ', $sqlParts);
 }
Esempio n. 3
0
    /**
     * Locks all rows of this entity matching the given criteria with the specified pessimistic lock mode.
     *
     * @param array $criteria
     * @param int   $lockMode
     *
     * @return void
     */
    public function lock(array $criteria, $lockMode)
    {
        $lockSql      = '';
        $conditionSql = $this->getSelectConditionSQL($criteria);

        switch ($lockMode) {
            case LockMode::PESSIMISTIC_READ:
                $lockSql = $this->platform->getReadLockSql();

                break;
            case LockMode::PESSIMISTIC_WRITE:

                $lockSql = $this->platform->getWriteLockSql();
                break;
        }

        $lock  = $this->platform->appendLockHint($this->getLockTablesSql(), $lockMode);
        $where = ($conditionSql ? ' WHERE ' . $conditionSql : '') . ' ';
        $sql = 'SELECT 1 '
             . $lock
             . $where
             . $lockSql;

        list($params, $types) = $this->expandParameters($criteria);

        $this->conn->executeQuery($sql, $params, $types);
    }
 /**
  * Gets the FROM and optionally JOIN conditions to lock the entity managed by this persister.
  *
  * @param integer $lockMode One of the Doctrine\DBAL\LockMode::* constants.
  *
  * @return string
  */
 protected function getLockTablesSql($lockMode)
 {
     return $this->platform->appendLockHint('FROM ' . $this->quoteStrategy->getTableName($this->class, $this->platform) . ' ' . $this->getSQLTableAlias($this->class->name), $lockMode);
 }
Esempio n. 5
0
 /**
  * Walks down a RangeVariableDeclaration AST node, thereby generating the appropriate SQL.
  *
  * @param AST\RangeVariableDeclaration $rangeVariableDeclaration
  *
  * @return string
  */
 public function walkRangeVariableDeclaration($rangeVariableDeclaration)
 {
     $class = $this->em->getClassMetadata($rangeVariableDeclaration->abstractSchemaName);
     $dqlAlias = $rangeVariableDeclaration->aliasIdentificationVariable;
     if ($rangeVariableDeclaration->isRoot) {
         $this->rootAliases[] = $dqlAlias;
     }
     $sql = $this->platform->appendLockHint($this->quoteStrategy->getTableName($class, $this->platform) . ' ' . $this->getSQLTableAlias($class->getTableName(), $dqlAlias), $this->query->getHint(Query::HINT_LOCK_MODE));
     if ($class->isInheritanceTypeJoined()) {
         $sql .= $this->_generateClassTableInheritanceJoins($class, $dqlAlias);
     }
     return $sql;
 }