本文整理汇总了PHP中Doctrine\ORM\Query\SqlWalker::walkFromClause方法的典型用法代码示例。如果您正苦于以下问题:PHP SqlWalker::walkFromClause方法的具体用法?PHP SqlWalker::walkFromClause怎么用?PHP SqlWalker::walkFromClause使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Doctrine\ORM\Query\SqlWalker
的用法示例。
在下文中一共展示了SqlWalker::walkFromClause方法的11个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: walkFromClause
/**
* @param $fromClause
*
* @return string
*/
public function walkFromClause($fromClause)
{
$sql = parent::walkFromClause($fromClause);
$aclMetadata = $this->getQuery()->getHint('acl.metadata');
$extraQueries = $this->getQuery()->getHint(AclFilter::HINT_ACL_EXTRA_CRITERIA);
if ($aclMetadata) {
foreach ($aclMetadata as $key => $metadata) {
$alias = $metadata['alias'];
$query = $metadata['query'];
$table = $metadata['table'];
$tableAlias = $this->getSQLTableAlias($table, $alias);
$aclAlias = 'ta' . $key . '_';
if ($extraQueries) {
$extraCriteriaSql = $this->parseExtraQueries($extraQueries, $tableAlias);
$aclSql = <<<ACL_SQL
INNER JOIN ({$query}) {$aclAlias} ON ({$tableAlias}.id = {$aclAlias}.id OR ({$extraCriteriaSql}))
ACL_SQL;
} else {
$aclSql = <<<ACL_SQL
INNER JOIN ({$query}) {$aclAlias} ON ({$tableAlias}.id = {$aclAlias}.id)
ACL_SQL;
}
$sql .= ' ' . $aclSql;
}
}
return $sql;
}
示例2: walkFromClause
public function walkFromClause($fromClause)
{
$result = parent::walkFromClause($fromClause);
if ($index = $this->getQuery()->getHint(self::HINT_FORCE_INDEX)) {
$result = preg_replace('#(\\bFROM\\s*\\w+\\s*\\w+)#', '\\1 FORCE INDEX (' . $index . ')', $result);
}
return $result;
}
示例3: walkFromClause
/**
* Walks down a FromClause AST node, thereby generating the appropriate SQL.
*
* @param string $fromClause fromClause
*
* @return string The SQL.
*/
public function walkFromClause($fromClause)
{
$sql = parent::walkFromClause($fromClause);
$tableAlias = $this->getSQLTableAlias($this->getQuery()->getHint('acl.entityRootTableName'), $this->getQuery()->getHint('acl.entityRootTableDqlAlias'));
$extraQuery = $this->getQuery()->getHint('acl.extra.query');
$tempAclView = sprintf(' JOIN (%s) ta_ ON %s.id = ta_.id ', $extraQuery, $tableAlias);
return $sql . $tempAclView;
}
示例4: walkFromClause
/**
* Walks down a FromClause AST node, thereby generating the appropriate SQL.
*
* @param string $fromClause
*
* @return string The SQL.
*/
public function walkFromClause($fromClause)
{
$sql = parent::walkFromClause($fromClause);
$tableAlias = $this->getSQLTableAlias($this->getQuery()->getHint('acl.entityRootTableName'), $this->getQuery()->getHint('acl.entityRootTableDqlAlias'));
$extraQuery = $this->getQuery()->getHint('acl.extra.query');
$tempAclView = <<<tempAclView
JOIN ({$extraQuery}) ta_ ON {$tableAlias}.id = ta_.id
tempAclView;
return $sql . ' ' . $tempAclView;
}
示例5: walkFromClause
/**
* {@inheritdoc}
*/
public function walkFromClause($fromClause)
{
$sql = parent::walkFromClause($fromClause);
$prefix = $this->getQuery()->getHint('acl_resource_prefix');
$fromAlias = $this->getQuery()->getHint('acl_from_alias');
$fromIdentifier = $this->getQuery()->getHint('acl_from_identifier');
$permissionsTableName = $this->getQuery()->getHint('acl_permissions_table_name');
$resourceCondition = $this->getConnection()->getDatabasePlatform()->getConcatExpression($this->getConnection()->quote($prefix), $this->dqlToSqlReference($fromAlias, $fromIdentifier));
$sql .= ' LEFT JOIN ' . $permissionsTableName . ' acl_p ON acl_p.resource = ' . $resourceCondition;
return $sql;
}
示例6: walkFromClause
/**
* @param \Doctrine\ORM\Query\AST\FromClause $fromClause
*
* @return string
*/
public function walkFromClause($fromClause)
{
$sql = parent::walkFromClause($fromClause) . ' ';
$aclJoin = $this->getQuery()->getHint('acl_join');
$oidReference = $this->getQuery()->getHint('acl_filter_oid_reference');
$objectIdentifierComparison = $this->getQuery()->getHint('acl_object_identifier_comparison');
$orX = $this->getQuery()->getHint('acl_filter_or_x');
$joinType = empty($orX) ? 'INNER' : 'LEFT';
$newOidReference = $this->DQLToSQLReference($oidReference);
$sql .= <<<SQL
{$joinType} JOIN ({$aclJoin}) acl ON CAST({$newOidReference} AS CHAR(100)) = {$objectIdentifierComparison}
SQL;
return $sql;
}
示例7: walkFromClause
/**
* {@inheritdoc}
*/
public function walkFromClause($fromClause)
{
$sql = parent::walkFromClause($fromClause);
$aclMetadata = $this->getQuery()->getHint('acl.metadata');
if ($aclMetadata) {
foreach ($aclMetadata as $key => $metadata) {
$alias = $metadata['alias'];
$query = $metadata['query'];
$table = $metadata['table'];
$tableAlias = $this->getSQLTableAlias($table, $alias);
$aclAlias = 'ta' . $key . '_';
$aclSql = <<<ACL_SQL
INNER JOIN ({$query}) {$aclAlias} ON {$tableAlias}.id = {$aclAlias}.id
ACL_SQL;
$sql .= ' ' . $aclSql;
}
}
return $sql;
}
示例8: __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);
}
示例9: __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);
}
示例10: walkFromClause
/**
* {@inheritDoc}
*/
public function walkFromClause($fromClause)
{
$result = parent::walkFromClause($fromClause);
$result .= $this->joinTranslations($fromClause);
return $result;
}
示例11: walkFromClause
/**
* {@inheritDoc}
*/
public function walkFromClause($fromClause)
{
$result = parent::walkFromClause($fromClause);
$result .= $this->translationJoinSql[0];
return $result;
}