Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 81
0.00% covered (danger)
0.00%
0 / 1
CRAP
0.00% covered (danger)
0.00%
0 / 1
SchemaHookHandler
0.00% covered (danger)
0.00%
0 / 81
0.00% covered (danger)
0.00%
0 / 1
30
0.00% covered (danger)
0.00%
0 / 1
 onLoadExtensionSchemaUpdates
0.00% covered (danger)
0.00%
0 / 81
0.00% covered (danger)
0.00%
0 / 1
30
1<?php
2
3declare( strict_types=1 );
4
5namespace MediaWiki\Extension\Translate;
6
7use DatabaseUpdater;
8use MediaWiki\Extension\Translate\Diagnostics\SyncTranslatableBundleStatusMaintenanceScript;
9use MediaWiki\Installer\Hook\LoadExtensionSchemaUpdatesHook;
10
11class SchemaHookHandler implements LoadExtensionSchemaUpdatesHook {
12
13    /** @param DatabaseUpdater $updater */
14    public function onLoadExtensionSchemaUpdates( $updater ) {
15        $dir = dirname( __DIR__, 1 ) . '/sql';
16        $dbType = $updater->getDB()->getType();
17
18        if ( $dbType === 'mysql' || $dbType === 'sqlite' ) {
19            $updater->addExtensionTable(
20                'translate_sections',
21                "{$dir}/{$dbType}/translate_sections.sql"
22            );
23            $updater->addExtensionTable(
24                'revtag',
25                "{$dir}/{$dbType}/revtag.sql"
26            );
27            $updater->addExtensionTable(
28                'translate_groupstats',
29                "{$dir}/{$dbType}/translate_groupstats.sql"
30            );
31            $updater->addExtensionTable(
32                'translate_reviews',
33                "{$dir}/{$dbType}/translate_reviews.sql"
34            );
35            $updater->addExtensionTable(
36                'translate_groupreviews',
37                "{$dir}/{$dbType}/translate_groupreviews.sql"
38            );
39            $updater->addExtensionTable(
40                'translate_tms',
41                "{$dir}/{$dbType}/translate_tm.sql"
42            );
43            $updater->addExtensionTable(
44                'translate_metadata',
45                "{$dir}/{$dbType}/translate_metadata.sql"
46            );
47            $updater->addExtensionTable(
48                'translate_messageindex',
49                "{$dir}/{$dbType}/translate_messageindex.sql"
50            );
51            $updater->addExtensionTable(
52                'translate_stash',
53                "{$dir}/{$dbType}/translate_stash.sql"
54            );
55            $updater->addExtensionTable(
56                'translate_translatable_bundles',
57                "{$dir}/{$dbType}/translate_translatable_bundles.sql"
58            );
59            $updater->addExtensionTable(
60                'translate_message_group_subscriptions',
61                "{$dir}/{$dbType}/translate_message_group_subscriptions.sql"
62            );
63
64            $updater->addExtensionTable(
65                'translate_cache',
66                "{$dir}/{$dbType}/translate_cache.sql"
67            );
68
69            if ( $dbType === 'mysql' ) {
70                // 1.38
71                $updater->modifyExtensionField(
72                    'translate_cache',
73                    'tc_key',
74                    "{$dir}/{$dbType}/translate_cache-alter-varbinary.sql"
75                );
76            }
77        } elseif ( $dbType === 'postgres' ) {
78            $updater->addExtensionTable(
79                'translate_sections',
80                "{$dir}/{$dbType}/tables-generated.sql"
81            );
82            $updater->addExtensionUpdate( [
83                'changeField', 'translate_cache', 'tc_exptime', 'TIMESTAMPTZ', 'th_timestamp::timestamp with time zone'
84            ] );
85        }
86
87        // 1.39
88        $updater->dropExtensionIndex(
89            'translate_messageindex',
90            'tmi_key',
91            "{$dir}/{$dbType}/patch-translate_messageindex-unique-to-pk.sql"
92        );
93        $updater->dropExtensionIndex(
94            'translate_tmt',
95            'tms_sid_lang',
96            "{$dir}/{$dbType}/patch-translate_tmt-unique-to-pk.sql"
97        );
98        $updater->dropExtensionIndex(
99            'revtag',
100            'rt_type_page_revision',
101            "{$dir}/{$dbType}/patch-revtag-unique-to-pk.sql"
102        );
103
104        $updater->addPostDatabaseUpdateMaintenance( SyncTranslatableBundleStatusMaintenanceScript::class );
105    }
106}