/** * 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); }
/** * {@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); }
/** * 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); }
/** * 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; }