protected function applyPatch($path, $isFullPath = false, $msg = null) { $prevScroll = $this->db->scrollableCursor(false); $prevPrep = $this->db->prepareStatements(false); parent::applyPatch($path, $isFullPath, $msg); $this->db->scrollableCursor($prevScroll); $this->db->prepareStatements($prevPrep); }
/** * Drops unnamed and creates named constraints following the pattern * <column>_ckc * * @param string $constraintType * @param string $table Name of the table to which the field belongs * @param string $field Name of the field to modify * @return bool False if patch is skipped. */ protected function updateConstraints($constraintType, $table, $field) { global $wgDBname, $wgDBmwschema; if (!$this->doTable($table)) { return true; } $this->output("...updating constraints on [{$table}].[{$field}] ..."); $updateKey = "{$field}-{$constraintType}-ck"; if (!$this->db->tableExists($table, __METHOD__)) { $this->output("...{$table} table does not exist, skipping modify field patch.\n"); return true; } elseif (!$this->db->fieldExists($table, $field, __METHOD__)) { $this->output("...{$field} field does not exist in {$table} table, " . "skipping modify field patch.\n"); return true; } elseif ($this->updateRowExists($updateKey)) { $this->output("...{$field} in table {$table} already patched.\n"); return true; } # After all checks passed, start the update $this->insertUpdateRow($updateKey); $path = 'named_constraints.sql'; $constraintMap = array('category_types' => "({$field} in('page', 'subcat', 'file'))", 'major_mime' => "({$field} in('unknown', 'application', 'audio', 'image', 'text', 'video'," . " 'message', 'model', 'multipart'))", 'media_type' => "({$field} in('UNKNOWN', 'BITMAP', 'DRAWING', 'AUDIO', 'VIDEO', 'MULTIMEDIA'," . "'OFFICE', 'TEXT', 'EXECUTABLE', 'ARCHIVE'))"); $constraint = $constraintMap[$constraintType]; # and hack-in those variables that should be replaced # in our template file right now $this->db->setSchemaVars(array('tableName' => $table, 'fieldName' => $field, 'checkConstraint' => $constraint, 'wgDBname' => $wgDBname, 'wgDBmwschema' => $wgDBmwschema)); # Full path from file name $path = $this->db->patchPath($path); # No need for a cursor allowing result-iteration; just apply a patch # store old value for re-setting later $wasScrollable = $this->db->scrollableCursor(false); # Apply patch $this->db->sourceFile($path); # Reset DB instance to have original state $this->db->setSchemaVars(false); $this->db->scrollableCursor($wasScrollable); $this->output("done.\n"); return true; }