Пример #1
0
 /**
  * Execute EXPLAIN $query and return the result
  * @return MySQLi_Result    the result handle
  */
 private function explain_query()
 {
     $Query = new QueryRewrite($this->query);
     $explain = $Query->asExplain();
     if (is_null($explain)) {
         return null;
     }
     return $this->mysqli->query($explain);
 }
Пример #2
0
 public function testConstructor()
 {
     $sql = "SELECT id FROM ips WHERE ip='192.168.0.1' AND type=1 LIMIT 1";
     $expectedType = QueryRewrite::SELECT;
     $expectedSelect = "SELECT id FROM ips WHERE ip='192.168.0.1' AND type=1 LIMIT 1";
     $expectedExplain = "EXPLAIN {$expectedSelect}";
     $expectedExtendedExplain = "EXPLAIN EXTENDED {$expectedSelect}";
     $QRW = new QueryRewrite($sql);
     $this->assertEquals($expectedType, $QRW->getType());
     $this->assertEquals($expectedSelect, $QRW->toSelect());
     $this->assertEquals($expectedExplain, $QRW->asExplain());
     $this->assertEquals($expectedExtendedExplain, $QRW->asExtendedExplain());
     unset($QRW);
 }
Пример #3
0
    if (isset($_REQUEST['primary']) && count($_REQUEST['primary']) > 0) {
        foreach ($_REQUEST['primary'] as $field => $value) {
            $where .= ' AND ' . Database::escapeField($field) . ' = ' . Database::find('review')->escape_string($value);
        }
    }
    $query = Database::find('review')->query_col('SELECT review.sample
								  FROM ' . Database::escapeField($reviewhost['history_table']) . ' AS review
								 WHERE review.checksum = ? ' . $where . '
							  ORDER BY review.ts_max DESC
							     LIMIT 1', $_REQUEST['checksum']);
} else {
    $query = Database::find('review')->query_col('SELECT review.sample
								  FROM ' . Database::escapeField($reviewhost['review_table']) . ' AS review
								 WHERE review.checksum = ?', $_REQUEST['checksum']);
}
$Query = new QueryRewrite();
$Query->setQuery($query);
$sample = $Query->asExtendedExplain();
$return['QueryRewrite'] = (array) $Query;
$return['oQuery'] = $query;
$return['eQuery'] = $sample;
$return['_REQUEST'] = $_REQUEST;
if (is_null($sample)) {
    $return['Warnings'][] = array('Code' => '0', 'Level' => 'Error', 'Message' => "I can't explain this type of query yet");
} else {
    list($label, $database) = explode('`.`', $_REQUEST['explainDb']);
    $label = str_replace('`', '', $label);
    $database = str_replace('`', '', $database);
    $host = $explainhosts[$label];
    Database::connect(null, $host['user'], $host['password'], null, null, 'pdo', array('dsn' => $host['dsn']), $label);
    Database::find($label)->query('USE ' . Database::escapeField($database));