Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 13
0.00% covered (danger)
0.00%
0 / 4
CRAP
0.00% covered (danger)
0.00%
0 / 1
NetworkedDatabaseCreator
0.00% covered (danger)
0.00%
0 / 13
0.00% covered (danger)
0.00%
0 / 4
42
0.00% covered (danger)
0.00%
0 / 1
 existsLocally
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
6
 existsInLoadBalancer
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 createLocally
0.00% covered (danger)
0.00%
0 / 5
0.00% covered (danger)
0.00%
0 / 1
6
 createInLoadBalancer
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 existsInConnection
n/a
0 / 0
n/a
0 / 0
0
 createInConnection
n/a
0 / 0
n/a
0 / 0
0
1<?php
2
3namespace MediaWiki\Installer;
4
5use MediaWiki\Installer\Task\ITaskContext;
6use MediaWiki\Status\Status;
7use Wikimedia\Rdbms\DatabaseDomain;
8use Wikimedia\Rdbms\IDatabase;
9use Wikimedia\Rdbms\ILoadBalancer;
10
11/**
12 * Common code for MySQL and PostgreSQL, which are similar due to the fact that
13 * databases can be created by getting a connection to a network service.
14 *
15 * SQLite does not inherit this because its connection handles can't operate on
16 * databases other than the one you originally connected to.
17 */
18abstract class NetworkedDatabaseCreator extends DatabaseCreator {
19    /** @inheritDoc */
20    public function existsLocally( $database ) {
21        $connStatus = $this->context->getConnection( ITaskContext::CONN_CREATE_DATABASE );
22        if ( !$connStatus->isOK() ) {
23            return false;
24        }
25        return $this->existsInConnection( $connStatus->getDB(), $database );
26    }
27
28    /** @inheritDoc */
29    public function existsInLoadBalancer( ILoadBalancer $loadBalancer, $database ) {
30        $conn = $loadBalancer->getConnection( DB_PRIMARY, [], DatabaseDomain::newUnspecified()->getId() );
31        return $this->existsInConnection( $conn, $database );
32    }
33
34    /** @inheritDoc */
35    public function createLocally( $database ): Status {
36        $connStatus = $this->context->getConnection( ITaskContext::CONN_CREATE_DATABASE );
37        if ( !$connStatus->isOK() ) {
38            return $connStatus;
39        }
40        $conn = $connStatus->getDB();
41        return $this->createInConnection( $conn, $database );
42    }
43
44    /** @inheritDoc */
45    public function createInLoadBalancer( ILoadBalancer $loadBalancer, $database ): Status {
46        $conn = $loadBalancer->getConnection( DB_PRIMARY, [], DatabaseDomain::newUnspecified()->getId() );
47        return $this->createInConnection( $conn, $database );
48    }
49
50    /**
51     * Determine whether a database exists on a connection
52     *
53     * @param IDatabase $conn
54     * @param string $database
55     * @return bool
56     */
57    abstract protected function existsInConnection( IDatabase $conn, $database );
58
59    /**
60     * Create a database on a connection
61     *
62     * @param IDatabase $conn
63     * @param string $database
64     * @return Status
65     */
66    abstract protected function createInConnection( IDatabase $conn, $database ): Status;
67}