Completed
Pull Request — master (#85)
by
unknown
10:07 queued 08:31
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\UuidFactory;
7
use Illuminate\Database\Connection;
8
use Illuminate\Support\ServiceProvider;
9
use Ramsey\Uuid\Codec\OrderedTimeCodec;
10
use Illuminate\Database\Schema\Grammars\Grammar;
11
use Illuminate\Database\Query\Grammars\MySqlGrammar as IlluminateMySqlGrammar;
12
use Illuminate\Database\Query\Grammars\SQLiteGrammar as IlluminateSQLiteGrammar;
13
14
class UuidServiceProvider extends ServiceProvider
15
{
16
    public function boot()
17
    {
18
        /** @var \Illuminate\Database\Connection $connection */
19
        $connection = app('db')->connection();
20
21
        $connection->setSchemaGrammar($this->createGrammarFromConnection($connection));
22
23
        $this->app->singleton(OrderedTimeCodec::class, function () {
24
            return new OrderedTimeCodec((new UuidFactory)->getUuidBuilder());
25
        });
26
    }
27
28
    protected function createGrammarFromConnection(Connection $connection): Grammar
29
    {
30
        $queryGrammar = $connection->getQueryGrammar();
31
32
        $queryGrammarClass = get_class($queryGrammar);
33
34
        if (! in_array($queryGrammarClass, [
35
            IlluminateMySqlGrammar::class,
36
            IlluminateSQLiteGrammar::class,
37
        ])) {
38
            throw new Exception("There current grammar `$queryGrammarClass` doesn't support binary uuids. Only  MySql and SQLite connections are supported.");
39
        }
40
41
        if ($queryGrammar instanceof IlluminateSQLiteGrammar) {
42
            $grammar = new SQLiteGrammar();
43
        } else {
44
            $grammar = new MySqlGrammar();
45
        }
46
47
        $grammar->setTablePrefix($queryGrammar->getTablePrefix());
48
49
        return $grammar;
50
    }
51
}
52