Added statement parser for comments.
Added "Traversable" implementation to access the parsed MySQL statements with "foreach". Setted SVN keywords. Fixed DocBlocks.
Dieser Commit ist enthalten in:
Ursprung
50aadc32c5
Commit
4ce08bf58f
9 geänderte Dateien mit 145 neuen und 30 gelöschten Zeilen
|
@ -5,8 +5,8 @@
|
||||||
*
|
*
|
||||||
* @package MySQLDumper
|
* @package MySQLDumper
|
||||||
* @subpackage SQL-Browser
|
* @subpackage SQL-Browser
|
||||||
* @version SVN: $Rev: 1227 $
|
* @version SVN: $Rev$
|
||||||
* @author $Author: DSB $
|
* @author $Author$
|
||||||
*/
|
*/
|
||||||
|
|
||||||
require_once "Msd/Sql/Parser/Interface.php";
|
require_once "Msd/Sql/Parser/Interface.php";
|
||||||
|
@ -17,7 +17,7 @@ require_once "Msd/Sql/Parser/Interface.php";
|
||||||
* @package MySQLDumper
|
* @package MySQLDumper
|
||||||
* @subpackage SQL-Browser
|
* @subpackage SQL-Browser
|
||||||
*/
|
*/
|
||||||
class Msd_Sql_Parser
|
class Msd_Sql_Parser implements Traversable
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Saves the raw MySQL Query.
|
* Saves the raw MySQL Query.
|
||||||
|
@ -26,6 +26,21 @@ class Msd_Sql_Parser
|
||||||
*/
|
*/
|
||||||
private $_rawQuery = null;
|
private $_rawQuery = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Parsed MySQL statements.
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
private $_parsedStatements = array();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Holds the summary of the parsing process.
|
||||||
|
* The summary contains the count of each statement in the query.
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
private $_parsingSummary = array();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Available MySQL statements, divided and sorted by their length.
|
* Available MySQL statements, divided and sorted by their length.
|
||||||
*
|
*
|
||||||
|
@ -124,14 +139,17 @@ class Msd_Sql_Parser
|
||||||
$commentCheck = substr($statement, 0, 2);
|
$commentCheck = substr($statement, 0, 2);
|
||||||
if (array_key_exists($commentCheck, $this->_sqlComments)) {
|
if (array_key_exists($commentCheck, $this->_sqlComments)) {
|
||||||
$commentEnd = $this->_sqlComments[$commentCheck];
|
$commentEnd = $this->_sqlComments[$commentCheck];
|
||||||
$startPos = strpos($sqlQuery, $commentEnd, $startPos) + strlen($commentEnd);
|
$endPos = strpos($sqlQuery, $commentEnd, $startPos) + strlen($commentEnd);
|
||||||
|
$comment = substr($sqlQuery, $startPos, $endPos - $startPos);
|
||||||
|
$this->_parseStatement($comment, 'Msd_Sql_Parser_Comment');
|
||||||
|
$startPos = $endPos;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
$statementLength = strlen($statement);
|
$statementLength = strlen($statement);
|
||||||
if (!isset($this->_sqlStatements[$statementLength])) {
|
if (
|
||||||
die("$statement\n");
|
!isset($this->_sqlStatements[$statementLength]) ||
|
||||||
}
|
!in_array($statement, $this->_sqlStatements[$statementLength])
|
||||||
if (!in_array($statement, $this->_sqlStatements[$statementLength])) {
|
) {
|
||||||
include_once 'Msd/Sql/Parser/Exception.php';
|
include_once 'Msd/Sql/Parser/Exception.php';
|
||||||
throw new Msd_Sql_Parser_Exception("Unknown MySQL statement is found: '$statement'");
|
throw new Msd_Sql_Parser_Exception("Unknown MySQL statement is found: '$statement'");
|
||||||
}
|
}
|
||||||
|
@ -140,7 +158,11 @@ class Msd_Sql_Parser
|
||||||
$completeStatement = trim(substr($sqlQuery, $startPos, $endPos - $startPos));
|
$completeStatement = trim(substr($sqlQuery, $startPos, $endPos - $startPos));
|
||||||
$startPos = $endPos + 1;
|
$startPos = $endPos + 1;
|
||||||
|
|
||||||
$this->_parseStatement($completeStatement, $parserClass);
|
$this->_parsedStatements[] = $this->_parseStatement($completeStatement, $parserClass);
|
||||||
|
if (!isset($this->_parsingSummary[$statement])) {
|
||||||
|
$this->_parsingSummary[$statement] = 0;
|
||||||
|
}
|
||||||
|
$this->_parsingSummary[$statement]++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -182,7 +204,7 @@ class Msd_Sql_Parser
|
||||||
* @param string $statement MySQL statement to parse
|
* @param string $statement MySQL statement to parse
|
||||||
* @param string $parserClass Parser class to use
|
* @param string $parserClass Parser class to use
|
||||||
*
|
*
|
||||||
* @return void
|
* @return array
|
||||||
*/
|
*/
|
||||||
private function _parseStatement($statement, $parserClass)
|
private function _parseStatement($statement, $parserClass)
|
||||||
{
|
{
|
||||||
|
@ -194,6 +216,66 @@ class Msd_Sql_Parser
|
||||||
throw new Msd_Sql_Parser_Exception('The given parser class must implement Msd_Sql_Parser_Interface!');
|
throw new Msd_Sql_Parser_Exception('The given parser class must implement Msd_Sql_Parser_Interface!');
|
||||||
}
|
}
|
||||||
|
|
||||||
$parserObject->parse($statement);
|
return $parserObject->parse($statement);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the parsing summary.
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function getSummary()
|
||||||
|
{
|
||||||
|
return $this->_parsingSummary;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Rewind (reset) the internal pointer position af the parsed statements array.
|
||||||
|
*
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function rewind()
|
||||||
|
{
|
||||||
|
return reset($this->_parsedStatements);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the current value af the parsed statements array.
|
||||||
|
*
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function current()
|
||||||
|
{
|
||||||
|
return current($this->_parsedStatements);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the current key af the parsed statements array.
|
||||||
|
*
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function key()
|
||||||
|
{
|
||||||
|
return key($this->_parsedStatements);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Move the internal pointer af the parsed statements array to the next position.
|
||||||
|
*
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function next()
|
||||||
|
{
|
||||||
|
return next($this->_parsedStatements);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Validates the internal pointer position af the parsed statements array.
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function valid()
|
||||||
|
{
|
||||||
|
return key($this->_parsedStatements) !== null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,8 +5,8 @@
|
||||||
*
|
*
|
||||||
* @package MySQLDumper
|
* @package MySQLDumper
|
||||||
* @subpackage SQL-Browser
|
* @subpackage SQL-Browser
|
||||||
* @version SVN: $Rev: 1227 $
|
* @version SVN: $Rev$
|
||||||
* @author $Author: DSB $
|
* @author $Author$
|
||||||
*/
|
*/
|
||||||
|
|
||||||
require_once 'Msd/Exception.php';
|
require_once 'Msd/Exception.php';
|
||||||
|
|
|
@ -5,8 +5,8 @@
|
||||||
*
|
*
|
||||||
* @package MySQLDumper
|
* @package MySQLDumper
|
||||||
* @subpackage SQL-Browser
|
* @subpackage SQL-Browser
|
||||||
* @version SVN: $Rev: 1227 $
|
* @version SVN: $Rev$
|
||||||
* @author $Author: DSB $
|
* @author $Author$
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -22,7 +22,7 @@ interface Msd_Sql_Parser_Interface
|
||||||
*
|
*
|
||||||
* @abstract
|
* @abstract
|
||||||
*
|
*
|
||||||
* @param string $statement MySQL INSERT statement.
|
* @param string $statement MySQL statement.
|
||||||
*
|
*
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
|
|
33
library/Msd/Sql/Parser/Statement/Comment.php
Normale Datei
33
library/Msd/Sql/Parser/Statement/Comment.php
Normale Datei
|
@ -0,0 +1,33 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* This file is part of MySQLDumper released under the GNU/GPL 2 license
|
||||||
|
* http://www.mysqldumper.net
|
||||||
|
*
|
||||||
|
* @package MySQLDumper
|
||||||
|
* @subpackage SQL-Browser
|
||||||
|
* @version SVN: $Rev$
|
||||||
|
* @author $Author$
|
||||||
|
*/
|
||||||
|
|
||||||
|
require_once "Msd/Sql/Parser/Interface.php";
|
||||||
|
/**
|
||||||
|
* Class to parse MySQL comments.
|
||||||
|
* This enables you to analyze and modify MySQL queries, which the user has entered.
|
||||||
|
*
|
||||||
|
* @package MySQLDumper
|
||||||
|
* @subpackage SQL-Browser
|
||||||
|
*/
|
||||||
|
class Msd_Sql_Parser_Statement_Comment implements Msd_Sql_Parser_Interface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Parse the statement.
|
||||||
|
*
|
||||||
|
* @param string $statement MySQL comment.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function parse($statement)
|
||||||
|
{
|
||||||
|
echo "Comment: $statement\n";
|
||||||
|
}
|
||||||
|
}
|
|
@ -5,8 +5,8 @@
|
||||||
*
|
*
|
||||||
* @package MySQLDumper
|
* @package MySQLDumper
|
||||||
* @subpackage SQL-Browser
|
* @subpackage SQL-Browser
|
||||||
* @version SVN: $Rev: 1227 $
|
* @version SVN: $Rev$
|
||||||
* @author $Author: DSB $
|
* @author $Author$
|
||||||
*/
|
*/
|
||||||
|
|
||||||
require_once "Msd/Sql/Parser/Interface.php";
|
require_once "Msd/Sql/Parser/Interface.php";
|
||||||
|
@ -22,7 +22,7 @@ class Msd_Sql_Parser_Statement_Create implements Msd_Sql_Parser_Interface
|
||||||
/**
|
/**
|
||||||
* Parse the statement.
|
* Parse the statement.
|
||||||
*
|
*
|
||||||
* @param string $statement MySQL INSERT statement.
|
* @param string $statement MySQL CREATE statement.
|
||||||
*
|
*
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -5,8 +5,8 @@
|
||||||
*
|
*
|
||||||
* @package MySQLDumper
|
* @package MySQLDumper
|
||||||
* @subpackage SQL-Browser
|
* @subpackage SQL-Browser
|
||||||
* @version SVN: $Rev: 1227 $
|
* @version SVN: $Rev$
|
||||||
* @author $Author: DSB $
|
* @author $Author$
|
||||||
*/
|
*/
|
||||||
|
|
||||||
require_once "Msd/Sql/Parser/Interface.php";
|
require_once "Msd/Sql/Parser/Interface.php";
|
||||||
|
@ -22,7 +22,7 @@ class Msd_Sql_Parser_Statement_Drop implements Msd_Sql_Parser_Interface
|
||||||
/**
|
/**
|
||||||
* Parse the statement.
|
* Parse the statement.
|
||||||
*
|
*
|
||||||
* @param string $statement MySQL INSERT statement.
|
* @param string $statement MySQL DROP statement.
|
||||||
*
|
*
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -5,8 +5,8 @@
|
||||||
*
|
*
|
||||||
* @package MySQLDumper
|
* @package MySQLDumper
|
||||||
* @subpackage SQL-Browser
|
* @subpackage SQL-Browser
|
||||||
* @version SVN: $Rev: 1227 $
|
* @version SVN: $Rev$
|
||||||
* @author $Author: DSB $
|
* @author $Author$
|
||||||
*/
|
*/
|
||||||
|
|
||||||
require_once "Msd/Sql/Parser/Interface.php";
|
require_once "Msd/Sql/Parser/Interface.php";
|
||||||
|
|
|
@ -5,8 +5,8 @@
|
||||||
*
|
*
|
||||||
* @package MySQLDumper
|
* @package MySQLDumper
|
||||||
* @subpackage SQL-Browser
|
* @subpackage SQL-Browser
|
||||||
* @version SVN: $Rev: 1227 $
|
* @version SVN: $Rev$
|
||||||
* @author $Author: DSB $
|
* @author $Author$
|
||||||
*/
|
*/
|
||||||
|
|
||||||
require_once "Msd/Sql/Parser/Interface.php";
|
require_once "Msd/Sql/Parser/Interface.php";
|
||||||
|
@ -22,7 +22,7 @@ class Msd_Sql_Parser_Statement_Lock implements Msd_Sql_Parser_Interface
|
||||||
/**
|
/**
|
||||||
* Parse the statement.
|
* Parse the statement.
|
||||||
*
|
*
|
||||||
* @param string $statement MySQL INSERT statement.
|
* @param string $statement MySQL LOCK statement.
|
||||||
*
|
*
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -5,8 +5,8 @@
|
||||||
*
|
*
|
||||||
* @package MySQLDumper
|
* @package MySQLDumper
|
||||||
* @subpackage SQL-Browser
|
* @subpackage SQL-Browser
|
||||||
* @version SVN: $Rev: 1227 $
|
* @version SVN: $Rev$
|
||||||
* @author $Author: DSB $
|
* @author $Author$
|
||||||
*/
|
*/
|
||||||
|
|
||||||
require_once "Msd/Sql/Parser/Interface.php";
|
require_once "Msd/Sql/Parser/Interface.php";
|
||||||
|
@ -22,7 +22,7 @@ class Msd_Sql_Parser_Statement_Unlock implements Msd_Sql_Parser_Interface
|
||||||
/**
|
/**
|
||||||
* Parse the statement.
|
* Parse the statement.
|
||||||
*
|
*
|
||||||
* @param string $statement MySQL INSERT statement.
|
* @param string $statement MySQL UNLOCK statement.
|
||||||
*
|
*
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
|
|
Laden …
In neuem Issue referenzieren