modifs.mineures sans commentaires
This commit is contained in:
parent
64c872cf3f
commit
86136e75a5
@ -32,6 +32,7 @@ class Pgsql implements IDatabase {
|
|||||||
protected const OPTIONS = [
|
protected const OPTIONS = [
|
||||||
"persistent" => true,
|
"persistent" => true,
|
||||||
"force_new" => false,
|
"force_new" => false,
|
||||||
|
"serial_support" => true,
|
||||||
];
|
];
|
||||||
|
|
||||||
const CONFIG = null;
|
const CONFIG = null;
|
||||||
@ -171,17 +172,21 @@ class Pgsql implements IDatabase {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getLastSerial() {
|
||||||
|
$db = $this->db();
|
||||||
|
$result = @pg_query($db, "select lastval()");
|
||||||
|
if ($result === false) return false;
|
||||||
|
$lastSerial = pg_fetch_row($result)[0];
|
||||||
|
pg_free_result($result);
|
||||||
|
return $lastSerial;
|
||||||
|
}
|
||||||
|
|
||||||
function exec($query, ?array $params=null) {
|
function exec($query, ?array $params=null) {
|
||||||
$db = $this->db();
|
$db = $this->db();
|
||||||
$query = new query($query, $params);
|
$query = new query($query, $params);
|
||||||
$result = $query->_exec($db);
|
$result = $query->_exec($db);
|
||||||
if ($query->isInsert()) {
|
$serialSupport = $this->options["serial_support"] ?? true;
|
||||||
$result = @pg_query($db, "select lastval()");
|
if ($serialSupport && $query->isInsert()) return $this->getLastSerial();
|
||||||
if ($result === false) return false;
|
|
||||||
$lastInsertId = pg_fetch_row($result)[0];
|
|
||||||
pg_free_result($result);
|
|
||||||
return $lastInsertId;
|
|
||||||
}
|
|
||||||
$affected_rows = pg_affected_rows($result);
|
$affected_rows = pg_affected_rows($result);
|
||||||
pg_free_result($result);
|
pg_free_result($result);
|
||||||
return $affected_rows;
|
return $affected_rows;
|
||||||
|
@ -1,15 +1,9 @@
|
|||||||
<?php
|
<?php
|
||||||
namespace nulib\db\pgsql;
|
namespace nulib\db\pgsql;
|
||||||
|
|
||||||
|
use nulib\cv;
|
||||||
use nulib\db\_private\_base;
|
use nulib\db\_private\_base;
|
||||||
use nulib\db\_private\_create;
|
|
||||||
use nulib\db\_private\_delete;
|
|
||||||
use nulib\db\_private\_generic;
|
|
||||||
use nulib\db\_private\_insert;
|
|
||||||
use nulib\db\_private\_select;
|
|
||||||
use nulib\db\_private\_update;
|
|
||||||
use nulib\db\_private\Tbindings;
|
use nulib\db\_private\Tbindings;
|
||||||
use nulib\ValueException;
|
|
||||||
|
|
||||||
class query extends _base {
|
class query extends _base {
|
||||||
use Tbindings;
|
use Tbindings;
|
||||||
@ -20,15 +14,28 @@ class query extends _base {
|
|||||||
* @return resource
|
* @return resource
|
||||||
*/
|
*/
|
||||||
function _exec($db) {
|
function _exec($db) {
|
||||||
|
$sql = $this->sql;
|
||||||
|
$bindings = $this->bindings;
|
||||||
if (static::DEBUG_QUERIES) { #XXX
|
if (static::DEBUG_QUERIES) { #XXX
|
||||||
error_log($this->sql);
|
error_log($sql);
|
||||||
//error_log(var_export($this->bindings, true));
|
//error_log(var_export($this->bindings, true));
|
||||||
}
|
}
|
||||||
if ($this->bindings !== null) {
|
if ($bindings !== null) {
|
||||||
#XXX corriger les bindings et la requête *dans le constructeur*
|
# trier d'abord les champ par ordre de longueur, pour éviter les overlaps
|
||||||
$result = pg_query_params($db, $this->sql, $this->bindings);
|
$names = array_keys($bindings);
|
||||||
|
usort($names, function ($a, $b) {
|
||||||
|
return -cv::compare(strlen(strval($a)), strlen(strval($b)));
|
||||||
|
});
|
||||||
|
$bparams = [];
|
||||||
|
$number = 1;
|
||||||
|
foreach ($names as $name) {
|
||||||
|
$sql = str_replace(":$name", "\$$number", $sql);
|
||||||
|
$bparams[] = $bindings[$name];
|
||||||
|
$number++;
|
||||||
|
}
|
||||||
|
$result = pg_query_params($db, $sql, $bparams);
|
||||||
} else {
|
} else {
|
||||||
$result = pg_query($db, $this->sql);
|
$result = pg_query($db, $sql);
|
||||||
}
|
}
|
||||||
if ($result === false) throw PgsqlException::last_error($db);
|
if ($result === false) throw PgsqlException::last_error($db);
|
||||||
return $result;
|
return $result;
|
||||||
|
Loading…
Reference in New Issue
Block a user