dblayeroo: in isert, return the primary key if the provided value is not autoincrement field with valid value

git-svn-id: https://svn.fournier38.fr/svn/ProgSVN/trunk@3920 bf3deb0d-5f1a-0410-827f-c0cc1f45334c
This commit is contained in:
2017-09-05 07:02:09 +00:00
parent fdce871157
commit 826d8851d4

View File

@@ -2765,12 +2765,6 @@ class dblayeroo
} }
$this->debugLog ("Entering createRequest ()"); $this->debugLog ("Entering createRequest ()");
$sql = $this->createRequest (); $sql = $this->createRequest ();
if ($this->driver === "pgsql" && $this->command === "INSERT")
{
// PgSQL doesn't support the lastInsertId if there is no autoincrement
// field. Will return the primary key
$sql .= " RETURNING ".$this->sep.$this->primary.$this->sep;
}
$this->debugLog ("Entering prepareRequest (XXX, ",false,")"); $this->debugLog ("Entering prepareRequest (XXX, ",false,")");
$st = $this->prepareRequest ($sql, false); $st = $this->prepareRequest ($sql, false);
$this->debugLog ("'",$this->getDisplayQuery (),"'"); $this->debugLog ("'",$this->getDisplayQuery (),"'");
@@ -2851,8 +2845,22 @@ class dblayeroo
} }
return $result; return $result;
case "INSERT": case "INSERT":
// If the primary key is not autoincrement, return the provided value if
// exists
if (! in_array ("autoincrement", $this->fields[$this->primary]) &&
key_exists ($this->primary, $this->setValues))
return $this->setValues[$this->primary];
// If the primary key is autoincrement and the provided value is not null
// Return it
if (in_array ("autoincrement", $this->fields[$this->primary]) &&
key_exists ($this->primary, $this->setValues) &&
$this->setValues[$this->primary] !== null)
return $this->setValues[$this->primary];
// If the primary key is autoincrement and the provided value is null or
// not provided, return the autoincremented value
// PostGres need the name of the column autoincrement to return something // PostGres need the name of the column autoincrement to return something
// If there is no autoincrement column, do not request the lastInsertId
$autoInc = null; $autoInc = null;
if ($this->driver === "pgsql") if ($this->driver === "pgsql")
{ {
@@ -2866,13 +2874,6 @@ class dblayeroo
} }
if ($autoInc !== null) if ($autoInc !== null)
$autoInc = $this->table."_${col}_seq"; $autoInc = $this->table."_${col}_seq";
else
{
$this->debugLog ("INSERT: PgSQL INSERT without Autoincrement. ".
"Return the PK value defined in RETURN part");
$result = $st->fetch (PDO::FETCH_ASSOC);
return $result[$this->primary];
}
} }
$this->debugLog ("INSERT: lastInsertId=", $this->debugLog ("INSERT: lastInsertId=",
self::$instance[$this->dsn]->lastInsertId ($autoInc)); self::$instance[$this->dsn]->lastInsertId ($autoInc));