X-Git-Url: http://git.cyclocoop.org/?a=blobdiff_plain;f=maintenance%2Fsql.php;h=1aceaced52a4329ac56a882b7191f6373bdf076d;hb=b114e482f08e460bd4e4f894700330fb458112eb;hp=a7fd827e05977f42f61ba5a4b60ae2c829a38b80;hpb=24b38e808244eb6c314c1b782ccc295f2dc4e945;p=lhc%2Fweb%2Fwiklou.git diff --git a/maintenance/sql.php b/maintenance/sql.php index a7fd827e05..1aceaced52 100644 --- a/maintenance/sql.php +++ b/maintenance/sql.php @@ -32,8 +32,9 @@ require_once __DIR__ . '/Maintenance.php'; class MwSql extends Maintenance { public function __construct() { parent::__construct(); - $this->mDescription = "Send SQL queries to a MediaWiki database. " . - "Takes a file name containing SQL as argument or runs interactively."; + $this->addDescription( 'Send SQL queries to a MediaWiki database. ' . + 'Takes a file name containing SQL as argument or runs interactively.' ); + $this->addOption( 'query', 'Run a single query instead of running interactively', false, true ); $this->addOption( 'cluster', 'Use an external cluster by name', false, true ); $this->addOption( 'wikidb', 'The database wiki ID to use if not the current one', false, true ); $this->addOption( 'slave', 'Use a slave server (either "any" or by name)', false, true ); @@ -70,7 +71,7 @@ class MwSql extends Maintenance { $index = DB_MASTER; } // Get a DB handle (with this wiki's DB selected) from the appropriate load balancer - $db = $lb->getConnection( $index, array(), $wiki ); + $db = $lb->getConnection( $index, [], $wiki ); if ( $this->hasOption( 'slave' ) && $db->getLBInfo( 'master' ) !== null ) { $this->error( "The server selected ({$db->getServer()}) is not a slave.", 1 ); } @@ -81,7 +82,7 @@ class MwSql extends Maintenance { $this->error( "Unable to open input file", true ); } - $error = $db->sourceStream( $file, false, array( $this, 'sqlPrintResult' ) ); + $error = $db->sourceStream( $file, false, [ $this, 'sqlPrintResult' ] ); if ( $error !== true ) { $this->error( $error, true ); } else { @@ -89,6 +90,13 @@ class MwSql extends Maintenance { } } + if ( $this->hasOption( 'query' ) ) { + $query = $this->getOption( 'query' ); + $this->sqlDoQuery( $db, $query, /* dieOnError */ true ); + wfWaitForSlaves(); + return; + } + $useReadline = function_exists( 'readline_add_history' ) && Maintenance::posix_isatty( 0 /*STDIN*/ ); @@ -102,6 +110,7 @@ class MwSql extends Maintenance { $wholeLine = ''; $newPrompt = '> '; $prompt = $newPrompt; + $doDie = !Maintenance::posix_isatty( 0 ); while ( ( $line = Maintenance::readconsole( $prompt ) ) !== false ) { if ( !$line ) { # User simply pressed return key @@ -122,19 +131,22 @@ class MwSql extends Maintenance { readline_add_history( $wholeLine . $db->getDelimiter() ); readline_write_history( $historyFile ); } - try { - $res = $db->query( $wholeLine ); - $this->sqlPrintResult( $res, $db ); - } catch ( DBQueryError $e ) { - $doDie = !Maintenance::posix_isatty( 0 ); - $this->error( $e, $doDie ); - } + $this->sqlDoQuery( $db, $wholeLine, $doDie ); $prompt = $newPrompt; $wholeLine = ''; } wfWaitForSlaves(); } + protected function sqlDoQuery( $db, $line, $dieOnError ) { + try { + $res = $db->query( $line ); + $this->sqlPrintResult( $res, $db ); + } catch ( DBQueryError $e ) { + $this->error( $e, $dieOnError ); + } + } + /** * Print the results, callback for $db->sourceStream() * @param ResultWrapper $res The results object