Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/phpmyadmin/phpmyadmin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Ungureanu <udan1107@gmail.com>2015-07-15 18:08:18 +0300
committerDan Ungureanu <udan1107@gmail.com>2015-07-15 18:08:18 +0300
commit024d96700d7aa8601687ebbc5a14bfbd103d7d56 (patch)
treecb349f92e762c0f38c9b2aa329e7ba1e322c3a01 /lint.php
parent4c24db081295ad034c0a7c52694d7612d9893761 (diff)
Reorganized code.
Fixed a bug that miscalculated the position of the tokens. Added tests. Signed-off-by: Dan Ungureanu <udan1107@gmail.com>
Diffstat (limited to 'lint.php')
-rw-r--r--lint.php136
1 files changed, 10 insertions, 126 deletions
diff --git a/lint.php b/lint.php
index 8a5a7cfb4a..138156c806 100644
--- a/lint.php
+++ b/lint.php
@@ -1,137 +1,21 @@
<?php
-
-// Loads the SQL lexer and parser, which are used to parse this error to detect
-// any errors.
-require_once 'libraries/sql-parser/autoload.php';
-
+/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
- * Gets the starting position of each line.
+ * Represents the interface between the linter and the query editor.
*
- * @param string $str String to be analyzed.
- *
- * @return array
+ * @package PhpMyAdmin
*/
-function getLines($str)
-{
- $lines = array(0);
- for ($i = 0, $len = strlen($str); $i < $len; ++$i) {
- if ($str[$i] === "\n") {
- $lines[] = $i;
- }
- }
- return $lines;
-}
+
+define('PHPMYADMIN', true);
/**
- * Computes the number of the line and column given an absolute position.
- *
- * @param array $lines The starting position of each line.
- * @param int $pos The absolute position
- *
- * @return void
+ * Loads the SQL lexer and parser, which are used to detect errors.
*/
-function findLineNumberAndColumn($lines, $pos)
-{
- $line = 0;
- foreach ($lines as $lineNo => $lineStart) {
- if ($lineStart >= $pos) {
- break;
- }
- $line = $lineNo;
- }
- return array($line, $pos - $lines[$line]);
-}
+require_once 'libraries/sql-parser/autoload.php';
/**
- * Runs the linting process.
- *
- * @param string $query The query to be checked.
- *
- * @return void
+ * Loads the linter.
*/
-function linter($query)
-{
- // Disabling lint for huge queries to save some resources.
- if (strlen($query) > 10000) {
- echo json_encode(
- array(
- array(
- 'message' => 'The linting is disabled for this query because it exceededs the maxmimum length',
- 'fromLine' => 0,
- 'fromColumn' => 0,
- 'toLine' => 0,
- 'toColumn' => 0,
- 'severity' => 'warning',
- )
- )
- );
- return;
- }
-
- /**
- * Lexer used for tokenizing the query.
- *
- * @var SqlParser\Lexer
- */
- $lexer = new SqlParser\Lexer($query);
-
- /**
- * Parsed used for analysing the query.
- *
- * @var SqlParser\Parser
- */
- $parser = new SqlParser\Parser($lexer->list);
-
- /**
- * Array containing all errors.
- *
- * @var array
- */
- $errors = SqlParser\Utils\Error::get(array($lexer, $parser));
-
- /**
- * The response containing of all errors.
- *
- * @var array
- */
- $response = array();
-
- /**
- * The starting position for each line.
- *
- * CodeMirror requires relative position to line, but the parser stores
- * only the absolute position of the character in string.
- *
- * @var array
- */
- $lines = getLines($query);
-
- // Building the response.
- foreach ($errors as $idx => $error) {
-
- // Starting position of the string that caused the error.
- list($fromLine, $fromColumn) = findLineNumberAndColumn(
- $lines, $error[3]
- );
-
- // Ending position of the string that caused the error.
- list($toLine, $toColumn) = findLineNumberAndColumn(
- $lines, $error[3] + strlen($error[2])
- );
-
- // Building the response.
- $response[] = array(
- 'message' => $error[0] . ' (near <code>' . $error[2] . '</code>)',
- 'fromLine' => $fromLine,
- 'fromColumn' => $fromColumn,
- 'toLine' => $toLine,
- 'toColumn' => $toColumn,
- 'severity' => 'error',
- );
- }
-
- // Sending back the answer.
- echo json_encode($response);
-}
+require_once 'libraries/Linter.class.php';
-linter($_REQUEST['sql_query']);
+PMA_Linter::lint($_REQUEST['sql_query']);