mirror of
https://github.com/vrana/adminer.git
synced 2025-08-30 17:50:00 +02:00
MySQL, PostgreSQL: Fix queries splitting and string constants
Thanks to alxivnov (https://github.com/vrana/adminer/pull/490).
This commit is contained in:
@@ -637,6 +637,10 @@ WHERE sys1.xtype = 'TR' AND sys2.name = " . q($table)
|
||||
return false;
|
||||
}
|
||||
|
||||
function is_c_style_escapes() {
|
||||
return true;
|
||||
}
|
||||
|
||||
function show_status() {
|
||||
return array();
|
||||
}
|
||||
|
@@ -1074,6 +1074,16 @@ if (!defined("DRIVER")) {
|
||||
return $strictMode;
|
||||
}
|
||||
|
||||
function is_c_style_escapes() {
|
||||
static $c_style = null;
|
||||
|
||||
if ($c_style === null) {
|
||||
$c_style = strpos(get_key_vals("SHOW VARIABLES LIKE 'sql_mode'")["sql_mode"], 'NO_BACKSLASH_ESCAPES') === false;
|
||||
}
|
||||
|
||||
return $c_style;
|
||||
}
|
||||
|
||||
/** Get process list
|
||||
* @return array ($row)
|
||||
*/
|
||||
|
@@ -493,6 +493,10 @@ AND c_src.TABLE_NAME = " . q($table);
|
||||
return false;
|
||||
}
|
||||
|
||||
function is_c_style_escapes() {
|
||||
return true;
|
||||
}
|
||||
|
||||
function process_list() {
|
||||
return get_rows('SELECT sess.process AS "process", sess.username AS "user", sess.schemaname AS "schema", sess.status AS "status", sess.wait_class AS "wait_class", sess.seconds_in_wait AS "seconds_in_wait", sql.sql_text AS "sql_text", sess.machine AS "machine", sess.port AS "port"
|
||||
FROM v$session sess LEFT OUTER JOIN v$sql sql
|
||||
|
@@ -885,6 +885,16 @@ AND typelem = 0"
|
||||
return false;
|
||||
}
|
||||
|
||||
function is_c_style_escapes() {
|
||||
static $c_style = null;
|
||||
|
||||
if ($c_style === null) {
|
||||
$c_style = get_vals("SHOW standard_conforming_strings")[0] == "off";
|
||||
}
|
||||
|
||||
return $c_style;
|
||||
}
|
||||
|
||||
function process_list() {
|
||||
return get_rows("SELECT * FROM pg_stat_activity ORDER BY " . (min_version(9.2) ? "pid" : "procpid"));
|
||||
}
|
||||
@@ -949,6 +959,7 @@ AND typelem = 0"
|
||||
"char|text" => "||",
|
||||
)
|
||||
),
|
||||
'c_style_escapes' => true,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@@ -771,6 +771,10 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
||||
return false;
|
||||
}
|
||||
|
||||
function is_c_style_escapes() {
|
||||
return true;
|
||||
}
|
||||
|
||||
function show_status() {
|
||||
$return = array();
|
||||
foreach (get_vals("PRAGMA compile_options") as $option) {
|
||||
|
@@ -81,7 +81,21 @@ if (!$error && $_POST) {
|
||||
$offset = $pos + strlen($found);
|
||||
|
||||
if ($found && rtrim($found) != $delimiter) { // find matching quote or comment end
|
||||
while (preg_match('(' . ($found == '/*' ? '\*/' : ($found == '[' ? ']' : (preg_match('~^-- |^#~', $found) ? "\n" : preg_quote($found) . "|\\\\."))) . '|$)s', $query, $match, PREG_OFFSET_CAPTURE, $offset)) { //! respect sql_mode NO_BACKSLASH_ESCAPES
|
||||
$c_style_escapes = is_c_style_escapes() || ($jush == "pgsql" && ($pos > 0 && strtolower($query[$pos - 1]) == "e"));
|
||||
|
||||
$pattern = '(';
|
||||
if ($found == '/*') {
|
||||
$pattern .= '\*/';
|
||||
} elseif ($found == '[') {
|
||||
$pattern .= ']';
|
||||
} elseif (preg_match('~^-- |^#~', $found)) {
|
||||
$pattern .= "\n";
|
||||
} else {
|
||||
$pattern .= preg_quote($found) . ($c_style_escapes ? "|\\\\." : "");
|
||||
}
|
||||
$pattern .= '|$)s';
|
||||
|
||||
while (preg_match($pattern, $query, $match, PREG_OFFSET_CAPTURE, $offset)) {
|
||||
$s = $match[0][0];
|
||||
if (!$s && $fp && !feof($fp)) {
|
||||
$query .= fread($fp, 1e5);
|
||||
|
Reference in New Issue
Block a user