Completed
Pull Request — master (#85)
by
unknown
12:05
created

UuidServiceProvider::optimizeUuids()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 10
rs 9.9332
c 0
b 0
f 0
cc 1
nc 1
nop 0
1
<?php
2
3
namespace Spatie\BinaryUuid;
4
5
use Exception;
6
use Ramsey\Uuid\Uuid;
7
use Ramsey\Uuid\UuidFactory;
8
use Illuminate\Database\Connection;
9
use Illuminate\Support\ServiceProvider;
10
use Ramsey\Uuid\Codec\OrderedTimeCodec;
11
use Illuminate\Database\Schema\Grammars\Grammar;
12
use Illuminate\Database\Query\Grammars\MySqlGrammar as IlluminateMySqlGrammar;
13
use Illuminate\Database\Query\Grammars\SQLiteGrammar as IlluminateSQLiteGrammar;
14
15
class UuidServiceProvider extends ServiceProvider
16
{
17
    public function boot()
18
    {
19
        /** @var \Illuminate\Database\Connection $connection */
20
        $connection = app('db')->connection();
21
22
        $connection->setSchemaGrammar($this->createGrammarFromConnection($connection));
23
24
        $this->app->singleton(OrderedTimeCodec::class, function () {
25
            return new OrderedTimeCodec((new UuidFactory)->getUuidBuilder());
26
        });
27
    }
28
29
    protected function createGrammarFromConnection(Connection $connection): Grammar
30
    {
31
        $queryGrammar = $connection->getQueryGrammar();
32
33
        $queryGrammarClass = get_class($queryGrammar);
34
35
        if (! in_array($queryGrammarClass, [
36
            IlluminateMySqlGrammar::class,
37
            IlluminateSQLiteGrammar::class,
38
        ])) {
39
            throw new Exception("There current grammar `$queryGrammarClass` doesn't support binary uuids. Only  MySql and SQLite connections are supported.");
40
        }
41
42
        if ($queryGrammar instanceof IlluminateSQLiteGrammar) {
43
            $grammar = new SQLiteGrammar();
44
        } else {
45
            $grammar = new MySqlGrammar();
46
        }
47
48
        $grammar->setTablePrefix($queryGrammar->getTablePrefix());
49
50
        return $grammar;
51
    }
52
}
53