Passed
Push — master ( 1ee36e...1b5a73 )
by Jonas
03:15
created

Schema   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 57
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 20
c 1
b 0
f 0
dl 0
loc 57
ccs 21
cts 21
cp 1
rs 10
wmc 7

3 Methods

Rating   Name   Duplication   Size   Complexity  
A getSchemaBuilder() 0 24 5
A getFacadeAccessor() 0 4 1
A connection() 0 4 1
1
<?php
2
3
namespace Staudenmeir\LaravelMergedRelations\Facades;
4
5
use Illuminate\Database\Connection;
6
use RuntimeException;
7
use Staudenmeir\LaravelMergedRelations\Schema\Builders\MySqlBuilder;
8
use Staudenmeir\LaravelMergedRelations\Schema\Builders\PostgresBuilder;
9
use Staudenmeir\LaravelMergedRelations\Schema\Builders\SQLiteBuilder;
10
use Staudenmeir\LaravelMergedRelations\Schema\Builders\SqlServerBuilder;
11
use Staudenmeir\LaravelMigrationViews\Facades\Schema as Base;
12
use Staudenmeir\LaravelMigrationViews\Schema\Grammars\MySqlGrammar;
13
use Staudenmeir\LaravelMigrationViews\Schema\Grammars\PostgresGrammar;
14
use Staudenmeir\LaravelMigrationViews\Schema\Grammars\SQLiteGrammar;
15
use Staudenmeir\LaravelMigrationViews\Schema\Grammars\SqlServerGrammar;
16
17
/**
18
 * @method static void createMergeView(string $name, array $relations, bool $duplicates = true, bool $orReplace = false)
19
 * @method static void createMergeViewWithoutDuplicates(string $name, array $relations)
20
 * @method static void createOrReplaceMergeView(string $name, array $relations, bool $duplicates = true)
21
 * @method static void createOrReplaceMergeViewWithoutDuplicates(string $name, array $relations)
22
 */
23
class Schema extends Base
24
{
25
    /**
26
     * Get a schema builder instance for a connection.
27
     *
28
     * @param string $name
29
     * @return \Illuminate\Database\Schema\Builder
30
     */
31 8
    public static function connection($name)
32
    {
33 8
        return static::getSchemaBuilder(
34 8
            static::$app['db']->connection($name)
35
        );
36
    }
37
38
    /**
39
     * Get a schema builder instance for the default connection.
40
     *
41
     * @return \Illuminate\Database\Schema\Builder
42
     */
43 32
    protected static function getFacadeAccessor()
44
    {
45 32
        return static::getSchemaBuilder(
46 32
            static::$app['db']->connection()
47
        );
48
    }
49
50
    /**
51
     * Get the schema builder.
52
     *
53
     * @param \Illuminate\Database\Connection $connection
54
     * @return \Illuminate\Database\Schema\Builder
55
     */
56 32
    protected static function getSchemaBuilder(Connection $connection)
57
    {
58 32
        $driver = $connection->getDriverName();
59
60 32
        switch ($driver) {
61 32
            case 'mysql':
62 8
                $connection->setSchemaGrammar($connection->withTablePrefix(new MySqlGrammar));
63
64 8
                return new MySqlBuilder($connection);
65 24
            case 'pgsql':
66 8
                $connection->setSchemaGrammar($connection->withTablePrefix(new PostgresGrammar));
67
68 8
                return new PostgresBuilder($connection);
69 16
            case 'sqlite':
70 8
                $connection->setSchemaGrammar($connection->withTablePrefix(new SQLiteGrammar));
71
72 8
                return new SQLiteBuilder($connection);
73 8
            case 'sqlsrv':
74 8
                $connection->setSchemaGrammar($connection->withTablePrefix(new SqlServerGrammar));
75
76 8
                return new SqlServerBuilder($connection);
77
        }
78
79
        throw new RuntimeException('This database is not supported.'); // @codeCoverageIgnore
80
    }
81
}
82