define("DRIVER", "pgsql");
if (extension_loaded("pgsql")) {
class Min_DB {
- var $extension = "PgSQL", $_link, $_result, $_string, $_database = true, $server_info, $affected_rows, $error;
+ var $extension = "PgSQL", $_link, $_result, $_string, $_database = true, $server_info, $affected_rows, $error, $timeout;
function _error($errno, $error) {
if (ini_bool("html_errors")) {
$this->error = "";
if (!$result) {
$this->error = pg_last_error($this->_link);
- return false;
+ $return = false;
} elseif (!pg_num_fields($result)) {
$this->affected_rows = pg_affected_rows($result);
- return true;
+ $return = true;
+ } else {
+ $return = new Min_Result($result);
+ }
+ if ($this->timeout) {
+ $this->timeout = 0;
+ $this->query("RESET statement_timeout");
}
- return new Min_Result($result);
+ return $return;
}
function multi_query($query) {
} elseif (extension_loaded("pdo_pgsql")) {
class Min_DB extends Min_PDO {
- var $extension = "PDO_PgSQL";
+ var $extension = "PDO_PgSQL", $timeout;
function connect($server, $username, $password) {
global $adminer;
return q($s);
}
+ function query($query, $unbuffered = false) {
+ $return = parent::query($query, $unbuffered);
+ if ($this->timeout) {
+ $this->timeout = 0;
+ parent::query("RESET statement_timeout");
+ }
+ return $return;
+ }
+
function warnings() {
return ''; // not implemented in PDO_PgSQL as of PHP 7.2.1
}
}
function slowQuery($query, $timeout) {
- // BEGIN, COMMIT - automatically wrapped into a transaction by pg_query but not by PDO
- return "BEGIN; SET LOCAL statement_timeout = " . (1000 * $timeout) . "; $query; COMMIT";
+ $this->_conn->query("SET statement_timeout = " . (1000 * $timeout));
+ $this->_conn->timeout = 1000 * $timeout;
+ return $query;
}
function convertSearch($idf, $val, $field) {