Вход Регистрация
Файл: vendor/doctrine/dbal/src/Platforms/SQLServer/SQL/Builder/SQLServerSelectSQLBuilder.php
Строк: 45
<?php

declare(strict_types=1);

namespace 
DoctrineDBALPlatformsSQLServerSQLBuilder;

use 
DoctrineDBALPlatformsSQLServerPlatform;
use 
DoctrineDBALQueryForUpdateConflictResolutionMode;
use 
DoctrineDBALQuerySelectQuery;
use 
DoctrineDBALSQLBuilderSelectSQLBuilder;

use function 
count;
use function 
implode;

final class 
SQLServerSelectSQLBuilder implements SelectSQLBuilder
{
    private 
SQLServerPlatform $platform;

    
/** @internal The SQL builder should be instantiated only by database platforms. */
    
public function __construct(SQLServerPlatform $platform)
    {
        
$this->platform $platform;
    }

    public function 
buildSQL(SelectQuery $query): string
    
{
        
$parts = ['SELECT'];

        if (
$query->isDistinct()) {
            
$parts[] = 'DISTINCT';
        }

        
$parts[] = implode(', '$query->getColumns());

        
$from $query->getFrom();

        if (
count($from) > 0) {
            
$parts[] = 'FROM ' implode(', '$from);
        }

        
$forUpdate $query->getForUpdate();

        if (
$forUpdate !== null) {
            
$with = ['UPDLOCK''ROWLOCK'];

            if (
$forUpdate->getConflictResolutionMode() === ConflictResolutionMode::SKIP_LOCKED) {
                
$with[] = 'READPAST';
            }

            
$parts[] = 'WITH (' implode(', '$with) . ')';
        }

        
$where $query->getWhere();

        if (
$where !== null) {
            
$parts[] = 'WHERE ' $where;
        }

        
$groupBy $query->getGroupBy();

        if (
count($groupBy) > 0) {
            
$parts[] = 'GROUP BY ' implode(', '$groupBy);
        }

        
$having $query->getHaving();

        if (
$having !== null) {
            
$parts[] = 'HAVING ' $having;
        }

        
$orderBy $query->getOrderBy();

        if (
count($orderBy) > 0) {
            
$parts[] = 'ORDER BY ' implode(', '$orderBy);
        }

        
$sql   implode(' '$parts);
        
$limit $query->getLimit();

        if (
$limit->isDefined()) {
            
$sql $this->platform->modifyLimitQuery($sql$limit->getMaxResults(), $limit->getFirstResult());
        }

        return 
$sql;
    }
}
Онлайн: 2
Реклама