本文整理汇总了PHP中Doctrine\ORM\Query\SqlWalker::walkWhereClause方法的典型用法代码示例。如果您正苦于以下问题:PHP SqlWalker::walkWhereClause方法的具体用法?PHP SqlWalker::walkWhereClause怎么用?PHP SqlWalker::walkWhereClause使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Doctrine\ORM\Query\SqlWalker
的用法示例。
在下文中一共展示了SqlWalker::walkWhereClause方法的8个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: walkWhereClause
/**
* Walks down a WhereClause AST node, thereby generating the appropriate SQL.
*
* @param $whereClause
* @return string The SQL.
*/
public function walkWhereClause($whereClause)
{
$sql = parent::walkWhereClause($whereClause);
if ($this->getQuery()->getHint('librinfoWalker.noIlike') === false) {
$sql = str_replace('LIKE', 'ILIKE', $sql);
}
return $sql;
}
示例2: walkWhereClause
/**
* @param \Doctrine\ORM\Query\AST\WhereClause $whereClause
*
* @return string
*/
public function walkWhereClause($whereClause)
{
$sql = parent::walkWhereClause($whereClause);
$aclWhereClause = $this->getQuery()->getHint('acl_where_clause');
$orX = $this->getQuery()->getHint('acl_filter_or_x');
$sql .= empty($sql) ? ' WHERE (' : ' AND (';
if (!empty($orX)) {
foreach ($orX as $key => $or) {
preg_match_all("/\\w+\\.{1}\\w+/", $or, $orReferences);
foreach ($orReferences as $orReference) {
$orX[$key] = str_replace($orReference[0], $this->DQLToSQLReference($orReference[0]), $or);
}
}
$sql .= '(' . new Orx($orX) . ') OR ';
}
$sql .= '(' . $aclWhereClause . '))';
return $sql;
}
示例3: walkWhereClause
/** {@inheritdoc} */
public function walkWhereClause($whereClause)
{
$sql = parent::walkWhereClause($whereClause);
if (null !== ($config = $this->getQuery()->getHint('config')) && $config->get('multitenant.enabled')) {
$fromClause = $this->getQuery()->getAST()->fromClause;
$from = $fromClause->identificationVariableDeclarations;
if (1 === count($from)) {
/** @var \Doctrine\ORM\Mapping\ClassMetadata $metadata */
$metadata = $this->getQueryComponent($from[0]->rangeVariableDeclaration->aliasIdentificationVariable)['metadata'];
$keymap = $config->get('multitenant.keymap');
if (isset($metadata->fieldMappings[$keymap])) {
$parts = explode(' ', $fromClause->dispatch($this));
return ($sql ? $sql . ' AND ' : ' WHERE ') . strtr(":table.:column = ':value'", [':table' => end($parts), ':column' => $metadata->fieldMappings[$keymap]['columnName'], ':value' => $config->get('app.key')]);
}
}
}
return $sql;
}
示例4: walkWhereClause
/**
* {@inheritdoc}
*/
public function walkWhereClause($whereClause)
{
$sql = parent::walkWhereClause($whereClause);
$sql .= empty($sql) ? ' WHERE (' : ' AND (';
$orX = $this->getQuery()->getHint('acl_or_x');
foreach ($orX as $key => $or) {
preg_match_all("/\\w+\\.{1}\\w+/", $or, $orReferences);
foreach ($orReferences as $orReference) {
$explode = explode('.', $orReference[0]);
$orX[$key] = str_replace($orReference[0], $this->dqlToSqlReference($explode[0], $explode[1]), $or);
}
}
$mask = (int) $this->getQuery()->getHint('acl_mask');
$identifiers = array_map(function ($value) {
return $value;
}, $this->getQuery()->getHint('acl_requester_identifiers'));
$expr = $this->getEntityManager()->getExpressionBuilder();
$orX[] = $expr->andX($expr->in('acl_p.requester', $identifiers), $expr->eq($mask, 'acl_p.mask & ' . $mask));
$sql .= '(' . new Orx($orX) . '))';
return $sql;
}
示例5: __construct
/**
* Initializes a new <tt>MultiTableDeleteExecutor</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();
$primaryClass = $em->getClassMetadata($AST->deleteClause->abstractSchemaName);
$primaryDqlAlias = $AST->deleteClause->aliasIdentificationVariable;
$rootClass = $em->getClassMetadata($primaryClass->rootEntityName);
$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', $primaryDqlAlias);
$this->_insertSql = 'INSERT INTO ' . $tempTable . ' (' . $idColumnList . ')' . ' SELECT t0.' . implode(', t0.', $idColumnNames);
$rangeDecl = new AST\RangeVariableDeclaration($primaryClass->name, $primaryDqlAlias);
$fromClause = new AST\FromClause(array(new AST\IdentificationVariableDeclaration($rangeDecl, null, array())));
$this->_insertSql .= $sqlWalker->walkFromClause($fromClause);
// Append WHERE clause, if there is one.
if ($AST->whereClause) {
$this->_insertSql .= $sqlWalker->walkWhereClause($AST->whereClause);
}
// 2. Create ID subselect statement used in DELETE ... WHERE ... IN (subselect)
$idSubselect = 'SELECT ' . $idColumnList . ' FROM ' . $tempTable;
// 3. Create and store DELETE statements
$classNames = array_merge($primaryClass->parentClasses, array($primaryClass->name), $primaryClass->subClasses);
foreach (array_reverse($classNames) as $className) {
$tableName = $quoteStrategy->getTableName($em->getClassMetadata($className), $platform);
$this->_sqlStatements[] = 'DELETE FROM ' . $tableName . ' WHERE (' . $idColumnList . ') IN (' . $idSubselect . ')';
}
// 4. Store DDL for temporary identifier table.
$columnDefinitions = array();
foreach ($idColumnNames as $idColumnName) {
$columnDefinitions[$idColumnName] = array('notnull' => true, 'type' => \Doctrine\DBAL\Types\Type::getType($rootClass->getTypeOfColumn($idColumnName)));
}
$this->_createTempTableSql = $platform->getCreateTemporaryTableSnippetSQL() . ' ' . $tempTable . ' (' . $platform->getColumnDeclarationListSQL($columnDefinitions) . ')';
$this->_dropTempTableSql = $platform->getDropTemporaryTableSQL($tempTable);
}
示例6: __construct
/**
* Initializes a new <tt>MultiTableUpdateExecutor</tt>.
*
* Internal note: Any SQL construction and preparation takes place in the constructor for
* best performance. With a query cache the executor will be cached.
*
* @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.
*/
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([new AST\IdentificationVariableDeclaration($rangeDecl, null, [])]);
$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, [$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);
if ($newValue instanceof AST\InputParameter) {
$this->_sqlParameters[$i][] = $newValue->name;
++$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 = [];
foreach ($idColumnNames as $idColumnName) {
$columnDefinitions[$idColumnName] = ['notnull' => true, 'type' => Type::getType(PersisterHelper::getTypeOfColumn($idColumnName, $rootClass, $em))];
}
$this->_createTempTableSql = $platform->getCreateTemporaryTableSnippetSQL() . ' ' . $tempTable . ' (' . $platform->getColumnDeclarationListSQL($columnDefinitions) . ')';
$this->_dropTempTableSql = $platform->getDropTemporaryTableSQL($tempTable);
}
示例7: walkWhereClause
/**
* {@inheritDoc}
*/
public function walkWhereClause($whereClause)
{
$result = parent::walkWhereClause($whereClause);
return $this->replace($this->replacements, $result);
}
示例8: walkWhereClause
/**
* {@inheritDoc}
*/
public function walkWhereClause($whereClause)
{
$result = parent::walkWhereClause($whereClause);
return str_replace(array_keys($this->replacements), array_values($this->replacements), $result);
}