Completed
Push — master ( 5a7252...b7e7e5 )
by Brent
01:20
created

UuidServiceProvider::createGrammarFromConnection()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 17
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 17
rs 9.4285
c 0
b 0
f 0
cc 3
eloc 9
nc 3
nop 1
1
<?php
2
3
namespace Spatie\BinaryUuid;
4
5
use Exception;
6
use Illuminate\Database\Connection;
7
use Illuminate\Database\Schema\Grammars\Grammar;
8
use Illuminate\Support\ServiceProvider;
9
use Illuminate\Database\Query\Grammars\MySqlGrammar as IlluminateMySqlGrammar;
10
use Illuminate\Database\Query\Grammars\SQLiteGrammar as IlluminateSQLiteGrammar;
11
12
class UuidServiceProvider extends ServiceProvider
13
{
14
    public function boot()
15
    {
16
        /** @var \Illuminate\Database\Connection $connection */
17
        $connection = app('db')->connection();
18
19
        $connection->setSchemaGrammar($this->createGrammarFromConnection($connection));
20
    }
21
22
    protected function createGrammarFromConnection(Connection $connection): Grammar
23
    {
24
        $queryGrammar = $connection->getQueryGrammar();
25
26
        if (!in_array(
27
            get_class($queryGrammar),
28
            [IlluminateMySqlGrammar::class, IlluminateSQLiteGrammar::class]
29
        )) {
30
            throw new Exception("spatie/laravel-binary-uuid only supports MySql or SQLite connections. The current connection doesn't match those criteria.");
31
        }
32
33
        if ($queryGrammar instanceof IlluminateSQLiteGrammar) {
34
            return new SQLiteGrammar();
35
        }
36
37
        return new MySqlGrammar();
38
    }
39
}
40