109 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			109 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
<?php
 | 
						|
 | 
						|
namespace Illuminate\Database;
 | 
						|
 | 
						|
use Closure;
 | 
						|
use Doctrine\DBAL\Driver\PDOSqlsrv\Driver as DoctrineDriver;
 | 
						|
use Illuminate\Database\Query\Grammars\SqlServerGrammar as QueryGrammar;
 | 
						|
use Illuminate\Database\Query\Processors\SqlServerProcessor;
 | 
						|
use Illuminate\Database\Schema\Grammars\SqlServerGrammar as SchemaGrammar;
 | 
						|
use Illuminate\Database\Schema\SqlServerBuilder;
 | 
						|
use Throwable;
 | 
						|
 | 
						|
class SqlServerConnection extends Connection
 | 
						|
{
 | 
						|
    /**
 | 
						|
     * Execute a Closure within a transaction.
 | 
						|
     *
 | 
						|
     * @param  \Closure  $callback
 | 
						|
     * @param  int  $attempts
 | 
						|
     * @return mixed
 | 
						|
     *
 | 
						|
     * @throws \Throwable
 | 
						|
     */
 | 
						|
    public function transaction(Closure $callback, $attempts = 1)
 | 
						|
    {
 | 
						|
        for ($a = 1; $a <= $attempts; $a++) {
 | 
						|
            if ($this->getDriverName() === 'sqlsrv') {
 | 
						|
                return parent::transaction($callback);
 | 
						|
            }
 | 
						|
 | 
						|
            $this->getPdo()->exec('BEGIN TRAN');
 | 
						|
 | 
						|
            // We'll simply execute the given callback within a try / catch block
 | 
						|
            // and if we catch any exception we can rollback the transaction
 | 
						|
            // so that none of the changes are persisted to the database.
 | 
						|
            try {
 | 
						|
                $result = $callback($this);
 | 
						|
 | 
						|
                $this->getPdo()->exec('COMMIT TRAN');
 | 
						|
            }
 | 
						|
 | 
						|
            // If we catch an exception, we will roll back so nothing gets messed
 | 
						|
            // up in the database. Then we'll re-throw the exception so it can
 | 
						|
            // be handled how the developer sees fit for their applications.
 | 
						|
            catch (Throwable $e) {
 | 
						|
                $this->getPdo()->exec('ROLLBACK TRAN');
 | 
						|
 | 
						|
                throw $e;
 | 
						|
            }
 | 
						|
 | 
						|
            return $result;
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Get the default query grammar instance.
 | 
						|
     *
 | 
						|
     * @return \Illuminate\Database\Query\Grammars\SqlServerGrammar
 | 
						|
     */
 | 
						|
    protected function getDefaultQueryGrammar()
 | 
						|
    {
 | 
						|
        return $this->withTablePrefix(new QueryGrammar);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Get a schema builder instance for the connection.
 | 
						|
     *
 | 
						|
     * @return \Illuminate\Database\Schema\SqlServerBuilder
 | 
						|
     */
 | 
						|
    public function getSchemaBuilder()
 | 
						|
    {
 | 
						|
        if (is_null($this->schemaGrammar)) {
 | 
						|
            $this->useDefaultSchemaGrammar();
 | 
						|
        }
 | 
						|
 | 
						|
        return new SqlServerBuilder($this);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Get the default schema grammar instance.
 | 
						|
     *
 | 
						|
     * @return \Illuminate\Database\Schema\Grammars\SqlServerGrammar
 | 
						|
     */
 | 
						|
    protected function getDefaultSchemaGrammar()
 | 
						|
    {
 | 
						|
        return $this->withTablePrefix(new SchemaGrammar);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Get the default post processor instance.
 | 
						|
     *
 | 
						|
     * @return \Illuminate\Database\Query\Processors\SqlServerProcessor
 | 
						|
     */
 | 
						|
    protected function getDefaultPostProcessor()
 | 
						|
    {
 | 
						|
        return new SqlServerProcessor;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Get the Doctrine DBAL driver.
 | 
						|
     *
 | 
						|
     * @return \Doctrine\DBAL\Driver\PDOSqlsrv\Driver
 | 
						|
     */
 | 
						|
    protected function getDoctrineDriver()
 | 
						|
    {
 | 
						|
        return new DoctrineDriver;
 | 
						|
    }
 | 
						|
}
 |