Ejemplo n.º 1
0
 /**
  * The main loop
  *
  * @return void
  * 
  **/
 public function startConsole()
 {
     require_once 'ShallowParser.php';
     $parser = new Boris_ShallowParser();
     $buf = '';
     $prompt = '>> ';
     // Oh so infinite
     for (;;) {
         // Read the line from the CLI. If we haven't yet terminated the current statement,
         // add an asterisk to the prompt as a little visual hint
         $line = readline($buf == '' ? $prompt : str_pad('?> ', strlen($prompt), ' ', STR_PAD_LEFT));
         // Add to the history
         if ($line == 'clear') {
             $this->clear();
             continue;
         }
         readline_add_history($line);
         if ($line === false) {
             break;
         }
         $buf .= $line;
         if ($this->profiling) {
             Varien_Profiler::reset('test');
             Varien_Profiler::start('test');
         }
         if ($this->database) {
             $res = Mage::getSingleton('core/resource')->getConnection('core_read');
             $profiler = $res->getProfiler();
             $profiler->setEnabled(true);
             $profiler->clear();
         }
         // This is some clever stuff from Boris. It parses the current command
         // and finds out what the heck is going on in there and if it's finished
         // yet.
         if ($statements = $parser->statements($buf)) {
             $buf = '';
             $fromglobalfunction = false;
             // Then try each statement
             foreach ($statements as $stmt) {
                 try {
                     // The exciting bit
                     $result = eval($stmt);
                     if ($result !== 'fromglobalfunction') {
                         $this->output($result);
                     } else {
                         $fromglobalfunction = true;
                     }
                 } catch (Exception $e) {
                     $this->out("! " . $e->getMessage(), 'red');
                     continue;
                 }
             }
             if ($this->profiling) {
                 Varien_Profiler::stop('test');
             }
             if ($this->database) {
                 if ($profiler->getEnabled()) {
                     $totalTime = $profiler->getTotalElapsedSecs();
                     $queryCount = $profiler->getTotalNumQueries();
                     $longestTime = 0;
                     $longestQuery = null;
                     if ($queryCount) {
                         foreach ($profiler->getQueryProfiles() as $query) {
                             if ($query->getElapsedSecs() > $longestTime) {
                                 $longestTime = $query->getElapsedSecs();
                                 $this->out($query->getQuery(), "yellow", null, false);
                                 $this->outTime($query->getElapsedSecs());
                             }
                         }
                     }
                 }
             }
             if ($this->profiling && !$fromglobalfunction) {
                 $this->outTime(Varien_Profiler::fetch('test'), "Duration: ");
             }
         }
     }
 }