From 5ecc9ac3d7e20d756137f8e784a618bce366c7ff Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Wed, 4 Jun 2025 19:35:23 +0400 Subject: [PATCH] =?UTF-8?q?ajout=20colonnes=20g=C3=A9n=C3=A9riques?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- php/src/db/CapacitorStorage.php | 20 +++++++++++++++----- php/src/db/mysql/MysqlStorage.php | 4 ---- php/src/db/pgsql/PgsqlStorage.php | 6 ++---- php/src/db/sqlite/SqliteStorage.php | 4 ---- php/tests/db/sqlite/SqliteStorageTest.php | 16 +++++++++++----- 5 files changed, 28 insertions(+), 22 deletions(-) diff --git a/php/src/db/CapacitorStorage.php b/php/src/db/CapacitorStorage.php index 9d4cdb1..e8bc011 100644 --- a/php/src/db/CapacitorStorage.php +++ b/php/src/db/CapacitorStorage.php @@ -32,19 +32,29 @@ abstract class CapacitorStorage { return $channel; } - /** DOIT être défini dans les classes dérivées */ - const PRIMARY_KEY_DEFINITION = null; + const PRIMARY_KEY_DEFINITION = [ + "id_" => "genserial", + ]; + # les définitions sont par défaut pour MariaDB/MySQL const SERDATA_DEFINITION = "mediumtext"; const SERSUM_DEFINITION = "varchar(40)"; const SERTS_DEFINITION = "datetime"; + const GENSERIAL_DEFINITION = "integer primary key autoincrement"; + const GENLIC_DEFINITION = "varchar(80)"; + const GENLIB_DEFINITION = "varchar(255)"; + const GENTEXT_DEFINITION = "mediumtext"; - protected static function sercol($def): string { + protected static function gencol($def): string { if (!is_string($def)) $def = strval($def); switch ($def) { case "serdata": $def = static::SERDATA_DEFINITION; break; case "sersum": $def = static::SERSUM_DEFINITION; break; case "serts": $def = static::SERTS_DEFINITION; break; + case "genserial": $def = static::GENSERIAL_DEFINITION; break; + case "genlic": $def = static::GENLIC_DEFINITION; break; + case "genlib": $def = static::GENLIB_DEFINITION; break; + case "gentext": $def = static::GENTEXT_DEFINITION; break; } return $def; } @@ -81,7 +91,7 @@ abstract class CapacitorStorage { $mindex++; } else { if ($mdef) { - $definitions[$mcol] = self::sercol($mdef); + $definitions[$mcol] = self::gencol($mdef); } else { unset($definitions[$mcol]); } @@ -92,7 +102,7 @@ abstract class CapacitorStorage { $constraints[] = $def; } } else { - $definitions[$col] = self::sercol($def); + $definitions[$col] = self::gencol($def); } } return cl::merge($definitions, $constraints); diff --git a/php/src/db/mysql/MysqlStorage.php b/php/src/db/mysql/MysqlStorage.php index ace8beb..41a7c65 100644 --- a/php/src/db/mysql/MysqlStorage.php +++ b/php/src/db/mysql/MysqlStorage.php @@ -19,10 +19,6 @@ class MysqlStorage extends CapacitorStorage { return $this->db; } - const PRIMARY_KEY_DEFINITION = [ - "id_" => "integer primary key auto_increment", - ]; - protected function tableExists(string $tableName): bool { $db = $this->db; $found = $db->get([ diff --git a/php/src/db/pgsql/PgsqlStorage.php b/php/src/db/pgsql/PgsqlStorage.php index dd89e2a..124a6c2 100644 --- a/php/src/db/pgsql/PgsqlStorage.php +++ b/php/src/db/pgsql/PgsqlStorage.php @@ -9,6 +9,8 @@ class PgsqlStorage extends CapacitorStorage { const SERDATA_DEFINITION = "text"; const SERSUM_DEFINITION = "varchar(40)"; const SERTS_DEFINITION = "timestamp"; + const GENSERIAL_DEFINITION = "serial primary key"; + const GENTEXT_DEFINITION = "text"; function __construct($pgsql) { $this->db = Pgsql::with($pgsql); @@ -20,10 +22,6 @@ class PgsqlStorage extends CapacitorStorage { return $this->db; } - const PRIMARY_KEY_DEFINITION = [ - "id_" => "serial primary key", - ]; - protected function tableExists(string $tableName): bool { if (($index = strpos($tableName, ".")) !== false) { $schemaName = substr($tableName, 0, $index); diff --git a/php/src/db/sqlite/SqliteStorage.php b/php/src/db/sqlite/SqliteStorage.php index 7495b46..5b2aea8 100644 --- a/php/src/db/sqlite/SqliteStorage.php +++ b/php/src/db/sqlite/SqliteStorage.php @@ -19,10 +19,6 @@ class SqliteStorage extends CapacitorStorage { return $this->db; } - const PRIMARY_KEY_DEFINITION = [ - "id_" => "integer primary key autoincrement", - ]; - protected function tableExists(string $tableName): bool { $found = $this->db->get([ # depuis la version 3.33.0 le nom officiel de la table est sqlite_schema, diff --git a/php/tests/db/sqlite/SqliteStorageTest.php b/php/tests/db/sqlite/SqliteStorageTest.php index e7197a3..2459b35 100644 --- a/php/tests/db/sqlite/SqliteStorageTest.php +++ b/php/tests/db/sqlite/SqliteStorageTest.php @@ -7,6 +7,12 @@ use nulib\db\Capacitor; use nulib\db\CapacitorChannel; class SqliteStorageTest extends TestCase { + static function Txx(...$values): void { + foreach ($values as $value) { + var_export($value); + } + } + function _testChargeStrings(SqliteStorage $storage, ?string $channel) { $storage->reset($channel); $storage->charge($channel, "first"); @@ -78,7 +84,7 @@ class SqliteStorageTest extends TestCase { $capacitor->each(["age" => [">", 10]], $setDone, ["++"]); $capacitor->each(["done" => 0], $setDone, null); - Txx(cl::all($capacitor->discharge(false))); + self::Txx(cl::all($capacitor->discharge(false))); $capacitor->close(); self::assertTrue(true); } @@ -133,16 +139,16 @@ class SqliteStorageTest extends TestCase { $capacitor->charge(["a" => null, "b" => null]); $capacitor->charge(["a" => "first", "b" => "second"]); - Txx("=== all"); + self::Txx("=== all"); /** @var Sqlite $sqlite */ $sqlite = $capacitor->getStorage()->db(); - Txx(cl::all($sqlite->all([ + self::Txx(cl::all($sqlite->all([ "select", "from" => $capacitor->getChannel()->getTableName(), ]))); - Txx("=== each"); + self::Txx("=== each"); $capacitor->each(null, function ($item, $values) { - Txx($values); + self::Txx($values); }); $capacitor->close();