+ /**
+ * returns a string containing the following in order:
+ * textid
+ * \n
+ * length of text (-1 on error = failure to retrieve/unserialize/gunzip/etc)
+ * \n
+ * text (may be empty)
+ *
+ * note that that the text string itself is *not* followed by newline
+ */
+ public function execute() {
+ $db = wfGetDB( DB_SLAVE );
+ $stdin = $this->getStdin();
+ while ( !feof( $stdin ) ) {
+ $line = fgets( $stdin );
+ if ( $line === false ) {
+ // We appear to have lost contact...
+ break;
+ }
+ $textId = intval( $line );
+ $text = $this->doGetText( $db, $textId );
+ if ($text === false) {
+ # actual error, not zero-length text
+ $textLen = "-1";
+ }
+ else {
+ $textLen = strlen($text);
+ }
+ $this->output( $textId . "\n" . $textLen . "\n" . $text );
+ }
+ }
+
+ /**
+ * May throw a database error if, say, the server dies during query.
+ * @param $db DatabaseBase object
+ * @param $id int The old_id
+ * @return String
+ */
+ private function doGetText( $db, $id ) {
+ $id = intval( $id );
+ $row = $db->selectRow( 'text',
+ array( 'old_text', 'old_flags' ),
+ array( 'old_id' => $id ),
+ __METHOD__ );
+ $text = Revision::getRevisionText( $row );
+ if ( $text === false ) {
+ return false;
+ }
+ return $text;
+ }
+}