Code
Explorer
You are a developer and looking for Shopware projects?
Apply Now!
getWriteLockSQL example
$conditionSql
=
$criteria
instanceof Criteria
?
$this
->
getSelectConditionCriteriaSQL
(
$criteria
)
:
$this
->
getSelectConditionSQL
(
$criteria
,
$assoc
)
;
switch
(
$lockMode
)
{
case
LockMode::PESSIMISTIC_READ:
$lockSql
= ' ' .
$this
->platform->
getReadLockSQL
(
)
;
break
;
case
LockMode::PESSIMISTIC_WRITE:
$lockSql
= ' ' .
$this
->platform->
getWriteLockSQL
(
)
;
break
;
}
$columnList
=
$this
->
getSelectColumnsSQL
(
)
;
$tableAlias
=
$this
->
getSQLTableAlias
(
$this
->class->name
)
;
$filterSql
=
$this
->
generateFilterConditionSQL
(
$this
->class,
$tableAlias
)
;
$tableName
=
$this
->quoteStrategy->
getTableName
(
$this
->class,
$this
->platform
)
;
if
(
$filterSql
!== ''
)
{
$conditionSql
=
$conditionSql
?
$conditionSql
. ' AND ' .
$filterSql
:
// Wrap the rownum query in a sub-query to allow writelocks without ORA-02014 error
if
(
$this
->driverConnection->
getDatabasePlatform
(
)
instanceof OraclePlatform
)
{
$sql
=
$this
->
createQueryBuilder
(
'w'
)
->
where
(
'w.id IN ('.
str_replace
(
'SELECT a.* FROM', 'SELECT a.id FROM',
$sql
)
.')'
)
->
getSQL
(
)
;
}
// use SELECT ... FOR UPDATE to lock table
$stmt
=
$this
->
executeQuery
(
$sql
.' '.
$this
->driverConnection->
getDatabasePlatform
(
)
->
getWriteLockSQL
(
)
,
$query
->
getParameters
(
)
,
$query
->
getParameterTypes
(
)
)
;
$doctrineEnvelope
=
$stmt
instanceof Result ?
$stmt
->
fetchAssociative
(
)
:
$stmt
->
fetch
(
)
;
if
(
false ===
$doctrineEnvelope
)
{
$this
->driverConnection->
commit
(
)
;
$this
->queueEmptiedAt =
microtime
(
true
)
* 1000;
return
null;
}