return false;
}
+ $this->query_start("--pg_set_client_encoding()", null, SQL_QUERY_AUX);
pg_set_client_encoding($this->pgsql, 'utf8');
+ $this->query_end(true);
+
// find out the bytea oid
$sql = "SELECT oid FROM pg_type WHERE typname = 'bytea'";
+ $this->query_start($sql, null, SQL_QUERY_AUX);
$result = pg_query($this->pgsql, $sql);
+ $this->query_end($result);
if ($result === false) {
return false;
}
if ($this->bytea_oid === false) {
return false;
}
+
return true;
}
public function get_server_info() {
static $info;
if (!$info) {
+ $this->query_start("--pg_version()", null, SQL_QUERY_AUX);
$info = pg_version($this->pgsql);
+ $this->query_end(true);
}
return array('description'=>$info['server'], 'version'=>$info['server']);
}
* @return array of table names in lowercase and without prefix
*/
public function get_tables() {
- $this->reads++;
$tables = array();
$prefix = str_replace('_', '\\\\_', $this->prefix);
$sql = "SELECT tablename
FROM pg_catalog.pg_tables
WHERE tablename LIKE '$prefix%'";
- if ($result = pg_query($this->pgsql, $sql)) {
+ $this->query_start($sql, null, SQL_QUERY_AUX);
+ $result = pg_query($this->pgsql, $sql);
+ $this->query_end($result);
+
+ if ($result) {
while ($row = pg_fetch_row($result)) {
$tablename = reset($row);
if (strpos($tablename, $this->prefix) !== 0) {
$sql = "SELECT *
FROM pg_catalog.pg_indexes
WHERE tablename = '$tablename'";
- if ($result = pg_query($this->pgsql, $sql)) {
+
+ $this->query_start($sql, null, SQL_QUERY_AUX);
+ $result = pg_query($this->pgsql, $sql);
+ $this->query_end($result);
+
+ if ($result) {
while ($row = pg_fetch_assoc($result)) {
if (!preg_match('/CREATE (|UNIQUE )INDEX ([^\s]+) ON '.$tablename.' USING ([^\s]+) \(([^\)]+)\)/i', $row['indexdef'], $matches)) {
continue;
WHERE relkind = 'r' AND c.relname = '$tablename' AND c.reltype > 0 AND a.attnum > 0
ORDER BY a.attnum";
- if (!$result = pg_query($this->pgsql, $sql)) {
+ $this->query_start($sql, null, SQL_QUERY_AUX);
+ $result = pg_query($this->pgsql, $sql);
+ $this->query_end($result);
+
+ if (!$result) {
return array();
}
while ($rawcolumn = pg_fetch_object($result)) {
*/
public function setup_is_unicodedb() {
/// Get PostgreSQL server_encoding value
- $this->reads++;
- if (!$result = pg_query($this->pgsql, "SHOW server_encoding")) {
+ $sql = "SHOW server_encoding";
+ $this->query_start($sql, null, SQL_QUERY_AUX);
+ $result = pg_query($this->pgsql, $sql);
+ $this->query_end($result);
+
+ if (!$result) {
return false;
}
$rawcolumn = pg_fetch_object($result);
* @return bool success
*/
public function change_database_structure($sql) {
- $this->writes++;
- $this->print_debug($sql);
- $result = pg_query($this->pgsql, $sql);
$this->reset_columns();
+
+ $this->query_start($sql, null, SQL_QUERY_STRUCTURE);
+ $result = pg_query($this->pgsql, $sql);
+ $this->query_end($result);
+
if ($result === false) {
$this->report_error($sql);
return false;
return false;
}
- $this->writes++;
- $this->print_debug($sql, $params);
+ $this->query_start($sql, $params, SQL_QUERY_UPDATE);
$result = pg_query_params($this->pgsql, $sql, $params);
+ $this->query_end($result);
if ($result === false) {
$this->report_error($sql, $params);
list($sql, $params, $type) = $this->fix_sql_params($sql, $params);
- $this->reads++;
- $this->print_debug($sql, $params);
+ $this->query_start($sql, $params, SQL_QUERY_SELECT);
$result = pg_query_params($this->pgsql, $sql, $params);
+ $this->query_end($result);
if ($result === false) {
$this->report_error($sql, $params);
}
list($sql, $params, $type) = $this->fix_sql_params($sql, $params);
- $this->reads++;
- $this->print_debug($sql, $params);
+ $this->query_start($sql, $params, SQL_QUERY_SELECT);
$result = pg_query_params($this->pgsql, $sql, $params);
+ $this->query_end($result);
if ($result === false) {
$this->report_error($sql, $params);
public function get_fieldset_sql($sql, array $params=null) {
list($sql, $params, $type) = $this->fix_sql_params($sql, $params);
- $this->reads++;
- $this->print_debug($sql, $params);
+ $this->query_start($sql, $params, SQL_QUERY_SELECT);
$result = pg_query_params($this->pgsql, $sql, $params);
+ $this->query_end($result);
if ($result === false) {
$this->report_error($sql, $params);
unset($params['id']);
} else {
//ugly workaround for pg < 8.2
- $this->reads++;
$seqsql = "SELECT NEXTVAL({$this->prefix}{$table}_id_seq) AS id";
+ $this->query_start($seqsql, NULL, SQL_QUERY_AUX);
$result = pg_query($this->pgsql, $seqsql);
+ $this->query_end($result);
if ($result === false) {
throw new dml_exception('missingidsequence', "{$this->prefix}{$table}"); // TODO: add localised string
}
$values = implode(',', $values);
$sql = "INSERT INTO {$this->prefix}$table ($fields) VALUES($values) $returning";
- $this->writes++;
- $this->print_debug($sql, $params);
+ $this->query_start($sql, $params, SQL_QUERY_INSERT);
$result = pg_query_params($this->pgsql, $sql, $params);
+ $this->query_end($result);
if ($result === false) {
$this->report_error($sql, $params);
}
foreach ($blobs as $key=>$value) {
- $this->writes++;
$value = pg_escape_bytea($this->pgsql, $value);
$sql = "UPDATE {$this->prefix}$table SET $key = '$value'::bytea WHERE id = $id";
+ $this->query_start($sql, NULL, SQL_QUERY_UPDATE);
$result = pg_query($this->pgsql, $sql);
+ $this->query_end($result);
if ($result !== false) {
pg_free_result($result);
}
$sets = implode(',', $sets);
$sql = "UPDATE {$this->prefix}$table SET $sets WHERE id=\$".$i;
- $this->writes++;
- $this->print_debug($sql, $params);
+ $this->query_start($sql, $params, SQL_QUERY_UPDATE);
$result = pg_query_params($this->pgsql, $sql, $params);
+ $this->query_end($result);
if ($result === false) {
$this->report_error($sql, $params);
}
foreach ($blobs as $key=>$value) {
- $this->writes++;
$value = pg_escape_bytea($this->pgsql, $value);
$sql = "UPDATE {$this->prefix}$table SET $key = '$value'::bytea WHERE id = $id";
+ $this->query_start($sql, NULL, SQL_QUERY_UPDATE);
$result = pg_query($this->pgsql, $sql);
+ $this->query_end($result);
if ($result === false) {
return false;
}
}
$sql = "UPDATE {$this->prefix}$table SET $newfield $select";
- $this->writes++;
- $this->print_debug($sql, $params);
+ $this->query_start($sql, $params, SQL_QUERY_UPDATE);
$result = pg_query_params($this->pgsql, $sql, $params);
+ $this->query_end($result);
if ($result === false) {
$this->report_error($sql, $params);
list($sql, $params, $type) = $this->fix_sql_params($sql, $params);
- $this->writes++;
- $this->print_debug($sql, $params);
+ $this->query_start($sql, $params, SQL_QUERY_UPDATE);
$result = pg_query_params($this->pgsql, $sql, $params);
+ $this->query_end($result);
if ($result === false) {
$this->report_error($sql, $params);
* this is _very_ useful for massive updates
*/
public function begin_sql() {
- $result = pg_query($this->pgsql, "BEGIN ISOLATION LEVEL READ COMMITTED");
+ $sql = "BEGIN ISOLATION LEVEL READ COMMITTED";
+ $this->query_start($sql, NULL, SQL_QUERY_AUX);
+ $result = pg_query($this->pgsql, $sql);
+ $this->query_end($result);
+
if ($result === false) {
return false;
}
* on DBs that support it, commit the transaction
*/
public function commit_sql() {
- $result = pg_query($this->pgsql, "COMMIT");
+ $sql = "COMMIT";
+ $this->query_start($sql, NULL, SQL_QUERY_AUX);
+ $result = pg_query($this->pgsql, $sql);
+ $this->query_end($result);
+
if ($result === false) {
return false;
}
* on DBs that support it, rollback the transaction
*/
public function rollback_sql() {
- $result = pg_query($this->pgsql, "ROLLBACK");
+ $sql = "ROLLBACK";
+ $this->query_start($sql, NULL, SQL_QUERY_AUX);
+ $result = pg_query($this->pgsql, $sql);
+ $this->query_end($result);
+
if ($result === false) {
return false;
}