From 490325c89dcdda5dd6dd492ebe90fb91314c96d3 Mon Sep 17 00:00:00 2001 From: Dan Ungureanu Date: Fri, 12 Feb 2016 09:37:03 +0200 Subject: [PATCH] Fixes #11920. Can't disable backquotes in export Updated sql-parser to phpmyadmin/sql-parser@de8b3efbbca418f7c867909dbcb3fbe4b4a20497 (v3.2.0). Signed-off-by: Dan Ungureanu --- ChangeLog | 1 + libraries/plugins/export/ExportSql.class.php | 6 ++++++ libraries/sql-parser/src/Context.php | 14 ++++++++++++++ 3 files changed, 21 insertions(+) diff --git a/ChangeLog b/ChangeLog index 4481c3f1f8..147f9b6f8f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -18,6 +18,7 @@ phpMyAdmin - ChangeLog - issue #11799 Backslashes in comments are being interpreted as escape characters - issue #11909 Can't insert row into table that contains generated column - issue #11677 sql-parser and php-gettext collide. +- issue #11920 Can't disable backquotes in export 4.5.4.1 (2016-01-29) - issue #11892 Error with PMA 4.4.15.3 diff --git a/libraries/plugins/export/ExportSql.class.php b/libraries/plugins/export/ExportSql.class.php index 9371131d36..5b68c22667 100644 --- a/libraries/plugins/export/ExportSql.class.php +++ b/libraries/plugins/export/ExportSql.class.php @@ -1551,6 +1551,12 @@ class ExportSql extends ExportPlugin // analysis. if (!$view) { + if (empty($sql_backquotes)) { + // Option "Enclose table and column names with backquotes" + // was checked. + Context::$MODE |= Context::NO_ENCLOSING_QUOTES; + } + // Using appropriate quotes. if (($compat === 'MSSQL') || ($sql_backquotes === '"')) { SqlParser\Context::$MODE |= SqlParser\Context::ANSI_QUOTES; diff --git a/libraries/sql-parser/src/Context.php b/libraries/sql-parser/src/Context.php index 7637953ab5..a62fa16b9e 100644 --- a/libraries/sql-parser/src/Context.php +++ b/libraries/sql-parser/src/Context.php @@ -190,6 +190,13 @@ abstract class Context // https://dev.mysql.com/doc/refman/5.0/en/sql-mode.html#sqlmode_strict_trans_tables const STRICT_TRANS_TABLES = 1048576; + // Custom modes. + + // The table and column names and any other field that must be escaped will + // not be. + // Reserved keywords are being escaped regardless this mode is used or not. + const NO_ENCLOSING_QUOTES = 1073741824; + /* * Combination SQL Modes * https://dev.mysql.com/doc/refman/5.0/en/sql-mode.html#sql-mode-combo @@ -520,9 +527,16 @@ abstract class Context return $str; } + if ((static::$MODE & Context::NO_ENCLOSING_QUOTES) + && (!static::isKeyword($str, true)) + ) { + return $str; + } + if (static::$MODE & Context::ANSI_QUOTES) { $quote = '"'; } + return $quote . str_replace($quote, $quote . $quote, $str) . $quote; } }