From 720ccb5ae6684d23213cb918b46284bb8076fdc2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Laurent=20L=C3=A9cluse?= <laurent.lecluse@unicaen.fr>
Date: Wed, 21 Aug 2024 14:24:53 +0200
Subject: [PATCH] =?UTF-8?q?-=20Ajout=20de=20la=20m=C3=A9thode=20Table->get?=
 =?UTF-8?q?LastInsertId=20permettant=20de=20retourner=20la=20derni=C3=A8re?=
 =?UTF-8?q?=20valeur=20de=20s=C3=A9quence=20utilis=C3=A9e=20pour=20peupler?=
 =?UTF-8?q?=20un=20ID=20lors=20d'un=20INSERT=20-=20Nouvelle=20option=20"re?=
 =?UTF-8?q?turn-insert-data"=20pour=20Table->merge,=20permettant=20de=20re?=
 =?UTF-8?q?tourner=20dans=20"insert-data"=20les=20donn=C3=A9es=20ins=C3=A9?=
 =?UTF-8?q?r=C3=A9es=20pour=20pouvoir=20r=C3=A9cup=C3=A9rer=20les=20ID=20p?=
 =?UTF-8?q?eupl=C3=A9s=20=C3=A0=20partir=20des=20s=C3=A9quences?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 CHANGELOG.md  |  2 ++
 src/Table.php | 20 +++++++++++++++++++-
 2 files changed, 21 insertions(+), 1 deletion(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index f1ca4fe..c9c4db1 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,8 @@
 ------------------
 
 - [Fix] Pour Oracle, la recherche des séquences des tables fonctionne pour les tables & séquences de plus de 30 caractères
+- Ajout de la méthode Table->getLastInsertId permettant de retourner la dernière valeur de séquence utilisée pour peupler un ID lors d'un INSERT
+- Nouvelle option "return-insert-data" pour Table->merge, permettant de retourner dans "insert-data" les données insérées pour pouvoir récupérer les ID peuplés à partir des séquences
 
 
 0.9.7 (19/07/2024)
diff --git a/src/Table.php b/src/Table.php
index 36cc9e0..9b339a5 100644
--- a/src/Table.php
+++ b/src/Table.php
@@ -25,6 +25,8 @@ class Table
      */
     private $transformCache = [];
 
+    private ?int $lastInsertId = null;
+
 
 
     /**
@@ -295,6 +297,13 @@ class Table
 
 
 
+    public function getLastInsertId(): ?int
+    {
+        return $this->lastInsertId;
+    }
+
+
+
     /**
      * @param array $data
      * @param array $options
@@ -309,7 +318,8 @@ class Table
         $bdd = $this->getBdd();
 
         if (!isset($data['ID']) && $this->hasId() && $this->hasSequence()) {
-            $data['ID'] = $this->getBdd()->sequence()->nextVal($this->ddl['sequence']);
+            $this->lastInsertId = $this->getBdd()->sequence()->nextVal($this->ddl['sequence']);
+            $data['ID'] = $this->lastInsertId;
         }
 
         $histoUserId = (int)$bdd->getOption('histo-user-id');
@@ -424,12 +434,17 @@ class Table
             'soft-delete'        => false,
             'insert'             => true,
             'update'             => true,
+            'return-insert-data'  => false,
             'update-cols'        => [],
             'update-ignore-cols' => [],
             'update-only-null'   => [],
         ];
         $options        = array_merge($defaultOptions, $options);
 
+        if ($options['return-insert-data']){
+            $result['insert-data'] = [];
+        }
+
         $ddl = $this->getDdl();
         $bdd = $this->getBdd();
 
@@ -519,6 +534,9 @@ class Table
             if ($options['insert']) {
                 $this->insert($n);
                 $result['insert']++;
+                if ($options['return-insert-data']){
+                    $result['insert-data'][] = $n;
+                }
             }
         }
 
-- 
GitLab