MediaWiki  1.23.2
OracleUpdater.php
Go to the documentation of this file.
1 <?php
31 
37  protected $db;
38 
39  protected function getCoreUpdateList() {
40  return array(
41  array( 'disableContentHandlerUseDB' ),
42 
43  // 1.17
44  array( 'doNamespaceDefaults' ),
45  array( 'doFKRenameDeferr' ),
46  array( 'doFunctions17' ),
47  array( 'doSchemaUpgrade17' ),
48  array( 'doInsertPage0' ),
49  array( 'doRemoveNotNullEmptyDefaults' ),
50  array( 'addTable', 'user_former_groups', 'patch-user_former_groups.sql' ),
51 
52  //1.18
53  array( 'addIndex', 'user', 'i02', 'patch-user_email_index.sql' ),
54  array( 'modifyField', 'user_properties', 'up_property', 'patch-up_property.sql' ),
55  array( 'addTable', 'uploadstash', 'patch-uploadstash.sql' ),
56  array( 'doRecentchangesFK2Cascade' ),
57 
58  //1.19
59  array( 'addIndex', 'logging', 'i05', 'patch-logging_type_action_index.sql' ),
60  array( 'addField', 'revision', 'rev_sha1', 'patch-rev_sha1_field.sql' ),
61  array( 'addField', 'archive', 'ar_sha1', 'patch-ar_sha1_field.sql' ),
62  array( 'doRemoveNotNullEmptyDefaults2' ),
63  array( 'addIndex', 'page', 'i03', 'patch-page_redirect_namespace_len.sql' ),
64  array( 'addField', 'uploadstash', 'us_chunk_inx', 'patch-us_chunk_inx_field.sql' ),
65  array( 'addField', 'job', 'job_timestamp', 'patch-job_timestamp_field.sql' ),
66  array( 'addIndex', 'job', 'i02', 'patch-job_timestamp_index.sql' ),
67  array( 'doPageRestrictionsPKUKFix' ),
68 
69  //1.20
70  array( 'addIndex', 'ipblocks', 'i05', 'patch-ipblocks_i05_index.sql' ),
71  array( 'addIndex', 'revision', 'i05', 'patch-revision_i05_index.sql' ),
72  array( 'dropField', 'category', 'cat_hidden', 'patch-cat_hidden.sql' ),
73 
74  //1.21
75  array( 'addField', 'revision', 'rev_content_format',
76  'patch-revision-rev_content_format.sql' ),
77  array( 'addField', 'revision', 'rev_content_model',
78  'patch-revision-rev_content_model.sql' ),
79  array( 'addField', 'archive', 'ar_content_format', 'patch-archive-ar_content_format.sql' ),
80  array( 'addField', 'archive', 'ar_content_model', 'patch-archive-ar_content_model.sql' ),
81  array( 'addField', 'archive', 'ar_id', 'patch-archive-ar_id.sql' ),
82  array( 'addField', 'externallinks', 'el_id', 'patch-externallinks-el_id.sql' ),
83  array( 'addField', 'page', 'page_content_model', 'patch-page-page_content_model.sql' ),
84  array( 'enableContentHandlerUseDB' ),
85  array( 'dropField', 'site_stats', 'ss_admins', 'patch-ss_admins.sql' ),
86  array( 'dropField', 'recentchanges', 'rc_moved_to_title', 'patch-rc_moved.sql' ),
87  array( 'addTable', 'sites', 'patch-sites.sql' ),
88  array( 'addField', 'filearchive', 'fa_sha1', 'patch-fa_sha1.sql' ),
89  array( 'addField', 'job', 'job_token', 'patch-job_token.sql' ),
90  array( 'addField', 'job', 'job_attempts', 'patch-job_attempts.sql' ),
91  array( 'addField', 'uploadstash', 'us_props', 'patch-uploadstash-us_props.sql' ),
92  array( 'modifyField', 'user_groups', 'ug_group', 'patch-ug_group-length-increase-255.sql' ),
93  array( 'modifyField', 'user_former_groups', 'ufg_group',
94  'patch-ufg_group-length-increase-255.sql' ),
95 
96  //1.23
97  array( 'addIndex', 'logging', 'i06', 'patch-logging_user_text_type_time_index.sql' ),
98  array( 'addIndex', 'logging', 'i07', 'patch-logging_user_text_time_index.sql' ),
99  array( 'addField', 'user', 'user_password_expires', 'patch-user_password_expire.sql' ),
100  array( 'addField', 'page', 'page_links_updated', 'patch-page_links_updated.sql' ),
101  array( 'addField', 'recentchanges', 'rc_source', 'patch-rc_source.sql' ),
102 
103  // KEEP THIS AT THE BOTTOM!!
104  array( 'doRebuildDuplicateFunction' ),
105 
106  );
107  }
108 
114  protected function doNamespaceDefaults() {
115  $meta = $this->db->fieldInfo( 'page', 'page_namespace' );
116  if ( $meta->defaultValue() != null ) {
117  return;
118  }
119 
120  $this->applyPatch(
121  'patch_namespace_defaults.sql',
122  false,
123  'Altering namespace fields with default value'
124  );
125  }
126 
130  protected function doFKRenameDeferr() {
131  $meta = $this->db->query( '
132  SELECT COUNT(*) cnt
133  FROM user_constraints
134  WHERE constraint_type = \'R\' AND deferrable = \'DEFERRABLE\''
135  );
136  $row = $meta->fetchRow();
137  if ( $row && $row['cnt'] > 0 ) {
138  return;
139  }
140 
141  $this->applyPatch( 'patch_fk_rename_deferred.sql', false, "Altering foreign keys ... " );
142  }
143 
147  protected function doFunctions17() {
148  $this->applyPatch( 'patch_create_17_functions.sql', false, "Recreating functions" );
149  }
150 
155  protected function doSchemaUpgrade17() {
156  // check if iwlinks table exists which was added in 1.17
157  if ( $this->db->tableExists( 'iwlinks' ) ) {
158  return;
159  }
160  $this->applyPatch( 'patch_16_17_schema_changes.sql', false, "Updating schema to 17" );
161  }
162 
166  protected function doInsertPage0() {
167  $this->output( "Inserting page 0 if missing ... " );
168  $row = array(
169  'page_id' => 0,
170  'page_namespace' => 0,
171  'page_title' => ' ',
172  'page_counter' => 0,
173  'page_is_redirect' => 0,
174  'page_is_new' => 0,
175  'page_random' => 0,
176  'page_touched' => $this->db->timestamp(),
177  'page_latest' => 0,
178  'page_len' => 0
179  );
180  $this->db->insert( 'page', $row, 'OracleUpdater:doInserPage0', array( 'IGNORE' ) );
181  $this->output( "ok\n" );
182  }
183 
188  protected function doRemoveNotNullEmptyDefaults() {
189  $meta = $this->db->fieldInfo( 'categorylinks', 'cl_sortkey_prefix' );
190  if ( $meta->isNullable() ) {
191  return;
192  }
193  $this->applyPatch(
194  'patch_remove_not_null_empty_defs.sql',
195  false,
196  'Removing not null empty constraints'
197  );
198  }
199 
200  protected function doRemoveNotNullEmptyDefaults2() {
201  $meta = $this->db->fieldInfo( 'ipblocks', 'ipb_by_text' );
202  if ( $meta->isNullable() ) {
203  return;
204  }
205  $this->applyPatch(
206  'patch_remove_not_null_empty_defs2.sql',
207  false,
208  'Removing not null empty constraints'
209  );
210  }
211 
216  protected function doRecentchangesFK2Cascade() {
217  $meta = $this->db->query( 'SELECT 1 FROM all_constraints WHERE owner = \'' .
218  strtoupper( $this->db->getDBname() ) .
219  '\' AND constraint_name = \'' .
220  $this->db->tablePrefix() .
221  'RECENTCHANGES_FK2\' AND delete_rule = \'CASCADE\''
222  );
223  $row = $meta->fetchRow();
224  if ( $row ) {
225  return;
226  }
227 
228  $this->applyPatch( 'patch_recentchanges_fk2_cascade.sql', false, "Altering RECENTCHANGES_FK2" );
229  }
230 
234  protected function doPageRestrictionsPKUKFix() {
235  $this->output( "Altering PAGE_RESTRICTIONS keys ... " );
236 
237  $meta = $this->db->query( 'SELECT column_name FROM all_cons_columns WHERE owner = \'' .
238  strtoupper( $this->db->getDBname() ) .
239  '\' AND constraint_name = \'' .
240  $this->db->tablePrefix() .
241  'PAGE_RESTRICTIONS_PK\' AND rownum = 1'
242  );
243  $row = $meta->fetchRow();
244  if ( $row['column_name'] == 'PR_ID' ) {
245  $this->output( "seems to be up to date.\n" );
246 
247  return;
248  }
249 
250  $this->applyPatch( 'patch-page_restrictions_pkuk_fix.sql', false );
251  $this->output( "ok\n" );
252  }
253 
257  protected function doRebuildDuplicateFunction() {
258  $this->applyPatch( 'patch_rebuild_dupfunc.sql', false, "Rebuilding duplicate function" );
259  }
260 
266  public function doUpdates( $what = array( 'core', 'extensions', 'purge', 'stats' ) ) {
267  parent::doUpdates( $what );
268 
269  $this->db->query( 'BEGIN fill_wiki_info; END;' );
270  }
271 
275  public function purgeCache() {
276  # We can't guarantee that the user will be able to use TRUNCATE,
277  # but we know that DELETE is available to us
278  $this->output( "Purging caches..." );
279  $this->db->delete( '/*Q*/' . $this->db->tableName( 'objectcache' ), '*', __METHOD__ );
280  $this->output( "done.\n" );
281  }
282 }
DatabaseUpdater\output
output( $str)
Output some text.
Definition: DatabaseUpdater.php:184
OracleUpdater\doFunctions17
doFunctions17()
Recreate functions to 17 schema layout.
Definition: OracleUpdater.php:146
OracleUpdater\purgeCache
purgeCache()
Overload: because of the DDL_MODE tablename escaping is a bit dodgy.
Definition: OracleUpdater.php:274
DatabaseUpdater\applyPatch
applyPatch( $path, $isFullPath=false, $msg=null)
Applies a SQL patch.
Definition: DatabaseUpdater.php:623
php
skin txt MediaWiki includes four core it has been set as the default in MediaWiki since the replacing Monobook it had been been the default skin since before being replaced by Vector largely rewritten in while keeping its appearance Several legacy skins were removed in the as the burden of supporting them became too heavy to bear Those in etc for skin dependent CSS etc for skin dependent JavaScript These can also be customised on a per user by etc This feature has led to a wide variety of user styles becoming that gallery is a good place to ending in php
Definition: skin.txt:62
OracleUpdater\doFKRenameDeferr
doFKRenameDeferr()
Uniform FK names + deferrable state.
Definition: OracleUpdater.php:129
DatabaseUpdater
Class for handling database updates.
Definition: DatabaseUpdater.php:33
OracleUpdater\doPageRestrictionsPKUKFix
doPageRestrictionsPKUKFix()
Fixed wrong PK, UK definition.
Definition: OracleUpdater.php:233
OracleUpdater\doRecentchangesFK2Cascade
doRecentchangesFK2Cascade()
Removed forcing of invalid state on recentchanges_fk2.
Definition: OracleUpdater.php:215
OracleUpdater
Class for handling updates to Oracle databases.
Definition: OracleUpdater.php:30
array
the array() calling protocol came about after MediaWiki 1.4rc1.
List of Api Query prop modules.
DatabaseOracle
Definition: DatabaseOracle.php:188
OracleUpdater\doInsertPage0
doInsertPage0()
Insert page (page_id = 0) to prevent FK constraint violation.
Definition: OracleUpdater.php:165
OracleUpdater\doRemoveNotNullEmptyDefaults
doRemoveNotNullEmptyDefaults()
Remove DEFAULT '' NOT NULL constraints from fields as '' is internally converted to NULL in Oracle.
Definition: OracleUpdater.php:187
OracleUpdater\doSchemaUpgrade17
doSchemaUpgrade17()
Schema upgrade 16->17 there are no incremental patches prior to this.
Definition: OracleUpdater.php:154
OracleUpdater\doRemoveNotNullEmptyDefaults2
doRemoveNotNullEmptyDefaults2()
Definition: OracleUpdater.php:199
OracleUpdater\$db
DatabaseOracle $db
Handle to the database subclass.
Definition: OracleUpdater.php:36
OracleUpdater\doUpdates
doUpdates( $what=array( 'core', 'extensions', 'purge', 'stats'))
Overload: after this action field info table has to be rebuilt.
Definition: OracleUpdater.php:265
OracleUpdater\getCoreUpdateList
getCoreUpdateList()
Get an array of updates to perform on the database.
Definition: OracleUpdater.php:38
OracleUpdater\doNamespaceDefaults
doNamespaceDefaults()
MySQL uses datatype defaults for NULL inserted into NOT NULL fields In namespace case that results in...
Definition: OracleUpdater.php:113
OracleUpdater\doRebuildDuplicateFunction
doRebuildDuplicateFunction()
rebuilding of the function that duplicates tables for tests
Definition: OracleUpdater.php:256