Issues (1426)

app/src/Command/DatabaseManagingCommand.php (33 issues)

1
<?php
2
0 ignored issues
show
Missing file doc comment
Loading history...
3
namespace Db3v4l\Command;
4
5
use Db3v4l\Core\DatabaseSchemaManager;
0 ignored issues
show
The type Db3v4l\Core\DatabaseSchemaManager was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
6
7
abstract class DatabaseManagingCommand extends SQLExecutingCommand
0 ignored issues
show
Missing doc comment for class DatabaseManagingCommand
Loading history...
8
{
9
    /**
0 ignored issues
show
Missing short description in doc comment
Loading history...
10
     * @param string[][] $instanceList
0 ignored issues
show
Missing parameter comment
Loading history...
Tag value for @param tag indented incorrectly; expected 2 spaces but found 1
Loading history...
11
     * @param array[] $dbSpecList key: db name (as used to identify configured databases), value: array('user': mandatory, 'dbname': mandatory, 'password': mandatory)
0 ignored issues
show
Expected 4 spaces after parameter type; 1 found
Loading history...
Expected 3 spaces after parameter name; 1 found
Loading history...
Tag value for @param tag indented incorrectly; expected 2 spaces but found 1
Loading history...
12
     * @return array 'succeeded': int, 'failed': int, 'results': same format as dbConfigurationManager::getInstanceConfiguration
0 ignored issues
show
Tag @return cannot be grouped with parameter tags in a doc comment
Loading history...
13
     * @throws \Exception
0 ignored issues
show
Tag @throws cannot be grouped with parameter tags in a doc comment
Loading history...
14
     *
15
     * @todo make it easier to report back to the caller the errors that prevented creation of any DB
16
     */
17
    protected function createDatabases($instanceList, $dbSpecList)
18
    {
19
        // Sadly, psql does not allow to create a db and a user using a multiple-sql-commands string,
20
        // and we have to resort to using temp files
21
        /// @todo can we make this safer? Ideally the new user name and pwd should neither hit disk nor the process list...
22
        $results = $this->executeSqlAction(
23
            $instanceList,
24
            'Creating new database & user',
25
            function ($schemaManager, $instanceName) use ($dbSpecList) {
26
                $dbConnectionSpec = $dbSpecList[$instanceName];
27
                /** @var DatabaseSchemaManager $schemaManager */
0 ignored issues
show
The open comment tag must be the only content on the line
Loading history...
Missing short description in doc comment
Loading history...
The close comment tag must be the only content on the line
Loading history...
28
                return $schemaManager->getCreateDatabaseSqlAction(
29
                    $dbConnectionSpec['dbname'],
30
                    isset($dbConnectionSpec['user']) ? $dbConnectionSpec['user'] : null,
31
                    isset($dbConnectionSpec['password']) ? $dbConnectionSpec['password'] : null,
32
                    (isset($dbConnectionSpec['charset']) && $dbConnectionSpec['charset'] != '') ? $dbConnectionSpec['charset'] : null
33
                );
34
            }
35
        );
36
37
        /// @todo the new connection spec should be generated by the schemaManager for each instance. This would allow
38
        ///       f.e. connection specs for Oracle to be different when using PDBs vs when using schemas
39
        ///       (this could be achieved by copying the 'dbname' member over the 'servicename' one, or unsetting 'servicename'...)
40
        $finalData = [];
41
        foreach($results['data'] as $instanceName => $data) {
0 ignored issues
show
Expected "foreach (...) {\n"; found "foreach(...) {\n"
Loading history...
42
            // check for failure in creation of temp db
43
            // @todo how can we tell apart correctly errors that actually prevented the db from being created from other errors?
44
            if (is_array($data) && isset($data['exitcode']) && $data['exitcode'] != 0) {
45
                continue;
46
            }
47
            $dbConnectionSpec = $dbSpecList[$instanceName];
48
            $finalData[$instanceName] = $instanceList[$instanceName];
49
            $finalData[$instanceName]['dbname'] = $dbConnectionSpec['dbname'];
50
            if (isset($dbConnectionSpec['user'])) {
51
                $finalData[$instanceName]['user'] = $dbConnectionSpec['user'];
52
            }
53
            if (isset($dbConnectionSpec['password'])) {
54
                $finalData[$instanceName]['password'] = $dbConnectionSpec['password'];
55
            }
56
            if (isset($dbConnectionSpec['charset'])) {
57
                $finalData[$instanceName]['charset'] = $dbConnectionSpec['charset'];
58
            }
59
        }
60
61
        $results['data'] = $finalData;
62
        return $results;
63
    }
64
65
    /**
0 ignored issues
show
Missing short description in doc comment
Loading history...
66
     * @param string[][] $instanceList
0 ignored issues
show
Missing parameter comment
Loading history...
Tag value for @param tag indented incorrectly; expected 2 spaces but found 1
Loading history...
67
     * @param array[] $dbSpecList key: db name (as used to identify configured databases), value: array('user': mandatory, 'dbname': mandatory, if unspecified assumed same as user)
0 ignored issues
show
Expected 4 spaces after parameter type; 1 found
Loading history...
Expected 8 spaces after parameter name; 1 found
Loading history...
Tag value for @param tag indented incorrectly; expected 2 spaces but found 1
Loading history...
68
     * @param bool $ifExists
0 ignored issues
show
Missing parameter comment
Loading history...
Expected 7 spaces after parameter type; 1 found
Loading history...
Tag value for @param tag indented incorrectly; expected 2 spaces but found 1
Loading history...
69
     * @param string $executionStrategy
0 ignored issues
show
Missing parameter comment
Loading history...
Expected 5 spaces after parameter type; 1 found
Loading history...
Superfluous parameter comment
Loading history...
Tag value for @param tag indented incorrectly; expected 2 spaces but found 1
Loading history...
70
     * @return array 'succeeded': int, 'failed': int, 'results': string[]
0 ignored issues
show
Tag @return cannot be grouped with parameter tags in a doc comment
Loading history...
71
     * @throws \Exception
0 ignored issues
show
Tag @throws cannot be grouped with parameter tags in a doc comment
Loading history...
72
     */
73
    protected function dropDatabases($instanceList, $dbSpecList, $ifExists = false)
74
    {
75
        return $this->executeSqlAction(
76
            $instanceList,
77
            'Dropping of database & user',
78
            function ($schemaManager, $instanceName) use ($dbSpecList, $ifExists) {
79
                $dbConnectionSpec = $dbSpecList[$instanceName];
80
                /** @var DatabaseSchemaManager $schemaManager */
0 ignored issues
show
The open comment tag must be the only content on the line
Loading history...
Missing short description in doc comment
Loading history...
The close comment tag must be the only content on the line
Loading history...
81
                return $schemaManager->getDropDatabaseSqlAction(
82
                    $dbConnectionSpec['dbname'],
83
                    isset($dbConnectionSpec['user']) ? $dbConnectionSpec['user'] : null,
84
                    $ifExists
85
                );
86
            }
87
        );
88
    }
89
}
90