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;
 | |
|     }
 | |
| }
 |