123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- <?php
-
- namespace Illuminate\Database;
-
- use Closure;
- use Exception;
- use Throwable;
- use Illuminate\Database\Schema\SqlServerBuilder;
- use Doctrine\DBAL\Driver\PDOSqlsrv\Driver as DoctrineDriver;
- use Illuminate\Database\Query\Processors\SqlServerProcessor;
- use Illuminate\Database\Query\Grammars\SqlServerGrammar as QueryGrammar;
- use Illuminate\Database\Schema\Grammars\SqlServerGrammar as SchemaGrammar;
-
- class SqlServerConnection extends Connection
- {
- /**
- * Execute a Closure within a transaction.
- *
- * @param \Closure $callback
- * @param int $attempts
- * @return mixed
- *
- * @throws \Exception|\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 (Exception $e) {
- $this->getPdo()->exec('ROLLBACK TRAN');
-
- throw $e;
- } 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;
- }
- }
|