summaryrefslogtreecommitdiff
path: root/hugo/libraries/parse_analyze.lib.php
diff options
context:
space:
mode:
authorTristan Zur <tzur@web.web.ccwn.org>2014-03-27 22:27:47 +0100
committerTristan Zur <tzur@web.web.ccwn.org>2014-03-27 22:27:47 +0100
commitb62676ca5d3d6f6ba3f019ea3f99722e165a98d8 (patch)
tree86722cb80f07d4569f90088eeaea2fc2f6e2ef94 /hugo/libraries/parse_analyze.lib.php
Initial commit of intern.ccwn.org contentsHEADmaster
Diffstat (limited to 'hugo/libraries/parse_analyze.lib.php')
-rw-r--r--hugo/libraries/parse_analyze.lib.php61
1 files changed, 61 insertions, 0 deletions
diff --git a/hugo/libraries/parse_analyze.lib.php b/hugo/libraries/parse_analyze.lib.php
new file mode 100644
index 0000000..9b9c800
--- /dev/null
+++ b/hugo/libraries/parse_analyze.lib.php
@@ -0,0 +1,61 @@
+<?php
+/* vim: set expandtab sw=4 ts=4 sts=4: */
+/**
+ * Parse and analyse a SQL query
+ *
+ * @package PhpMyAdmin
+ */
+if (! defined('PHPMYADMIN')) {
+ exit;
+}
+
+/**
+ *
+ */
+$GLOBALS['unparsed_sql'] = $sql_query;
+$parsed_sql = PMA_SQP_parse($sql_query);
+$analyzed_sql = PMA_SQP_analyze($parsed_sql);
+
+// for bug 780516: now that we use case insensitive preg_match
+// or flags from the analyser, do not put back the reformatted query
+// into $sql_query, to make this kind of query work without
+// capitalizing keywords:
+//
+// CREATE TABLE SG_Persons (
+// id int(10) unsigned NOT NULL auto_increment,
+// first varchar(64) NOT NULL default '',
+// PRIMARY KEY (`id`)
+// )
+
+// check for a real SELECT ... FROM
+$is_select = isset($analyzed_sql[0]['queryflags']['select_from']);
+
+// If the query is a Select, extract the db and table names and modify
+// $db and $table, to have correct page headers, links and left frame.
+// db and table name may be enclosed with backquotes, db is optionnal,
+// query may contain aliases.
+
+/**
+ * @todo if there are more than one table name in the Select:
+ * - do not extract the first table name
+ * - do not show a table name in the page header
+ * - do not display the sub-pages links)
+ */
+if ($is_select) {
+ $prev_db = $db;
+ if (isset($analyzed_sql[0]['table_ref'][0]['table_true_name'])) {
+ $table = $analyzed_sql[0]['table_ref'][0]['table_true_name'];
+ }
+ if (isset($analyzed_sql[0]['table_ref'][0]['db'])
+ && strlen($analyzed_sql[0]['table_ref'][0]['db'])
+ ) {
+ $db = $analyzed_sql[0]['table_ref'][0]['db'];
+ } else {
+ $db = $prev_db;
+ }
+ // Nijel: don't change reload, if we already decided to reload in import
+ if (empty($reload) && empty($GLOBALS['is_ajax_request'])) {
+ $reload = ($db == $prev_db) ? 0 : 1;
+ }
+}
+?>