modifs.mineures sans commentaires

This commit is contained in:
Jephté Clain 2025-09-15 15:13:53 +04:00
parent 2583ff70e5
commit 20c0cb2e0f
3 changed files with 106 additions and 100 deletions

80
.idea/php.xml generated
View File

@ -22,56 +22,56 @@
</component>
<component name="PhpIncludePathManager">
<include_path>
<path value="$PROJECT_DIR$/php/vendor/symfony/polyfill-ctype" />
<path value="$PROJECT_DIR$/php/vendor/theseer/tokenizer" />
<path value="$PROJECT_DIR$/php/vendor/symfony/deprecation-contracts" />
<path value="$PROJECT_DIR$/php/vendor/symfony/yaml" />
<path value="$PROJECT_DIR$/php/vendor/phpunit/php-text-template" />
<path value="$PROJECT_DIR$/php/vendor/phpunit/php-file-iterator" />
<path value="$PROJECT_DIR$/php/vendor/phpunit/php-timer" />
<path value="$PROJECT_DIR$/php/vendor/composer" />
<path value="$PROJECT_DIR$/php/vendor/dflydev/dot-access-data" />
<path value="$PROJECT_DIR$/php/vendor/doctrine/instantiator" />
<path value="$PROJECT_DIR$/php/vendor/league/commonmark" />
<path value="$PROJECT_DIR$/php/vendor/league/config" />
<path value="$PROJECT_DIR$/php/vendor/myclabs/deep-copy" />
<path value="$PROJECT_DIR$/php/vendor/nette/schema" />
<path value="$PROJECT_DIR$/php/vendor/nette/utils" />
<path value="$PROJECT_DIR$/php/vendor/nikic/php-parser" />
<path value="$PROJECT_DIR$/php/vendor/nulib/tests" />
<path value="$PROJECT_DIR$/php/vendor/phar-io/manifest" />
<path value="$PROJECT_DIR$/php/vendor/phar-io/version" />
<path value="$PROJECT_DIR$/php/vendor/phpmailer/phpmailer" />
<path value="$PROJECT_DIR$/php/vendor/phpunit/php-code-coverage" />
<path value="$PROJECT_DIR$/php/vendor/sebastian/type" />
<path value="$PROJECT_DIR$/php/vendor/sebastian/object-enumerator" />
<path value="$PROJECT_DIR$/php/vendor/sebastian/version" />
<path value="$PROJECT_DIR$/php/vendor/sebastian/global-state" />
<path value="$PROJECT_DIR$/php/vendor/phpunit/php-file-iterator" />
<path value="$PROJECT_DIR$/php/vendor/phpunit/php-invoker" />
<path value="$PROJECT_DIR$/php/vendor/phpunit/php-text-template" />
<path value="$PROJECT_DIR$/php/vendor/phpunit/php-timer" />
<path value="$PROJECT_DIR$/php/vendor/phpunit/phpunit" />
<path value="$PROJECT_DIR$/php/vendor/psr/cache" />
<path value="$PROJECT_DIR$/php/vendor/psr/container" />
<path value="$PROJECT_DIR$/php/vendor/psr/event-dispatcher" />
<path value="$PROJECT_DIR$/php/vendor/psr/log" />
<path value="$PROJECT_DIR$/php/vendor/sebastian/cli-parser" />
<path value="$PROJECT_DIR$/php/vendor/sebastian/code-unit" />
<path value="$PROJECT_DIR$/php/vendor/sebastian/code-unit-reverse-lookup" />
<path value="$PROJECT_DIR$/php/vendor/sebastian/comparator" />
<path value="$PROJECT_DIR$/php/vendor/sebastian/complexity" />
<path value="$PROJECT_DIR$/php/vendor/sebastian/diff" />
<path value="$PROJECT_DIR$/php/vendor/sebastian/environment" />
<path value="$PROJECT_DIR$/php/vendor/sebastian/exporter" />
<path value="$PROJECT_DIR$/php/vendor/sebastian/global-state" />
<path value="$PROJECT_DIR$/php/vendor/sebastian/lines-of-code" />
<path value="$PROJECT_DIR$/php/vendor/sebastian/object-enumerator" />
<path value="$PROJECT_DIR$/php/vendor/sebastian/object-reflector" />
<path value="$PROJECT_DIR$/php/vendor/sebastian/recursion-context" />
<path value="$PROJECT_DIR$/php/vendor/sebastian/resource-operations" />
<path value="$PROJECT_DIR$/php/vendor/sebastian/diff" />
<path value="$PROJECT_DIR$/php/vendor/sebastian/cli-parser" />
<path value="$PROJECT_DIR$/php/vendor/doctrine/instantiator" />
<path value="$PROJECT_DIR$/php/vendor/sebastian/comparator" />
<path value="$PROJECT_DIR$/php/vendor/sebastian/lines-of-code" />
<path value="$PROJECT_DIR$/php/vendor/sebastian/code-unit-reverse-lookup" />
<path value="$PROJECT_DIR$/php/vendor/sebastian/code-unit" />
<path value="$PROJECT_DIR$/php/vendor/sebastian/object-reflector" />
<path value="$PROJECT_DIR$/php/vendor/sebastian/exporter" />
<path value="$PROJECT_DIR$/php/vendor/phpunit/phpunit" />
<path value="$PROJECT_DIR$/php/vendor/phpunit/php-invoker" />
<path value="$PROJECT_DIR$/php/vendor/phar-io/version" />
<path value="$PROJECT_DIR$/php/vendor/phar-io/manifest" />
<path value="$PROJECT_DIR$/php/vendor/nulib/tests" />
<path value="$PROJECT_DIR$/php/vendor/myclabs/deep-copy" />
<path value="$PROJECT_DIR$/php/vendor/nikic/php-parser" />
<path value="$PROJECT_DIR$/php/vendor/composer" />
<path value="$PROJECT_DIR$/php/vendor/league/config" />
<path value="$PROJECT_DIR$/php/vendor/nette/schema" />
<path value="$PROJECT_DIR$/php/vendor/league/commonmark" />
<path value="$PROJECT_DIR$/php/vendor/dflydev/dot-access-data" />
<path value="$PROJECT_DIR$/php/vendor/psr/event-dispatcher" />
<path value="$PROJECT_DIR$/php/vendor/nette/utils" />
<path value="$PROJECT_DIR$/php/vendor/psr/container" />
<path value="$PROJECT_DIR$/php/vendor/psr/log" />
<path value="$PROJECT_DIR$/php/vendor/psr/cache" />
<path value="$PROJECT_DIR$/php/vendor/phpmailer/phpmailer" />
<path value="$PROJECT_DIR$/php/vendor/symfony/expression-language" />
<path value="$PROJECT_DIR$/php/vendor/sebastian/type" />
<path value="$PROJECT_DIR$/php/vendor/sebastian/version" />
<path value="$PROJECT_DIR$/php/vendor/symfony/cache" />
<path value="$PROJECT_DIR$/php/vendor/symfony/cache-contracts" />
<path value="$PROJECT_DIR$/php/vendor/symfony/deprecation-contracts" />
<path value="$PROJECT_DIR$/php/vendor/symfony/expression-language" />
<path value="$PROJECT_DIR$/php/vendor/symfony/polyfill-ctype" />
<path value="$PROJECT_DIR$/php/vendor/symfony/polyfill-php73" />
<path value="$PROJECT_DIR$/php/vendor/symfony/polyfill-php80" />
<path value="$PROJECT_DIR$/php/vendor/symfony/service-contracts" />
<path value="$PROJECT_DIR$/php/vendor/symfony/polyfill-php73" />
<path value="$PROJECT_DIR$/php/vendor/symfony/var-exporter" />
<path value="$PROJECT_DIR$/php/vendor/symfony/yaml" />
<path value="$PROJECT_DIR$/php/vendor/theseer/tokenizer" />
</include_path>
</component>
<component name="PhpProjectSharedConfiguration" php_language_level="7.4">

View File

@ -259,15 +259,20 @@ abstract class Capacitor {
return $raw !== null;
}
function create(CapacitorChannel $channel): void {
if ($channel->isCreated()) return;
$channel->ensureSetup();
function _create(CapacitorChannel $channel): void {
if (!$this->tableExists($channel->getTableName())) {
$this->prepareMetadata();
$this->getMigration($channel)->migrate($this->db());
$this->afterCreate($channel);
}
$channel->setCreated();
}
function create(CapacitorChannel $channel, bool $force=false): void {
if ($force || !$channel->isCreated()) {
$channel->ensureSetup();
$this->_create($channel);
$channel->setCreated();
}
}
protected function afterCreate(CapacitorChannel $channel): void {

View File

@ -1,6 +1,7 @@
<?php
namespace nulib\db;
use nulib\app;
use nulib\cl;
use nulib\php\func;
use nulib\str;
@ -15,6 +16,8 @@ class CapacitorChannel implements ITransactor {
const TABLE_NAME = null;
const AUTOCREATE = null;
protected function COLUMN_DEFINITIONS(): ?array {
return static::COLUMN_DEFINITIONS;
} const COLUMN_DEFINITIONS = null;
@ -62,15 +65,11 @@ class CapacitorChannel implements ITransactor {
$this->name = $name;
$this->tableName = $tableName;
$manageTransactions = $params["manageTransactions"] ?? static::MANAGE_TRANSACTIONS;
$this->manageTransactions = $manageTransactions;
$eachCommitThreshold = $params["eachCommitThreshold"] ?? null;
$eachCommitThreshold = self::verifix_eachCommitThreshold($eachCommitThreshold);
$this->eachCommitThreshold = $eachCommitThreshold;
$autocreate = $params["autocreate"] ?? null;
$autocreate ??= !app::get()->isProductionMode();
$this->created = !$autocreate;
$this->setup = false;
$this->created = false;
$columnDefinitions = $this->COLUMN_DEFINITIONS();
$primaryKeys = cl::withn(static::PRIMARY_KEYS);
$migration = cl::withn(static::MIGRATION);
@ -128,6 +127,13 @@ class CapacitorChannel implements ITransactor {
$this->columnDefinitions = $columnDefinitions;
$this->primaryKeys = $primaryKeys;
$this->migration = $migration;
$manageTransactions = $params["manageTransactions"] ?? static::MANAGE_TRANSACTIONS;
$this->manageTransactions = $manageTransactions;
$eachCommitThreshold = $params["eachCommitThreshold"] ?? null;
$eachCommitThreshold = self::verifix_eachCommitThreshold($eachCommitThreshold);
$this->eachCommitThreshold = $eachCommitThreshold;
}
protected string $name;
@ -142,40 +148,6 @@ class CapacitorChannel implements ITransactor {
return $this->tableName;
}
/**
* @var bool indiquer si les modifications de each doivent être gérées dans
* une transaction. si false, l'utilisateur doit lui même gérer la
* transaction.
*/
protected bool $manageTransactions;
function isManageTransactions(): bool {
return $this->manageTransactions;
}
function setManageTransactions(bool $manageTransactions=true): self {
$this->manageTransactions = $manageTransactions;
return $this;
}
/**
* @var ?int nombre maximum de modifications dans une transaction avant un
* commit automatique dans {@link Capacitor::each()}. Utiliser null pour
* désactiver la fonctionnalité.
*
* ce paramètre n'a d'effet que si $manageTransactions==true
*/
protected ?int $eachCommitThreshold;
function getEachCommitThreshold(): ?int {
return $this->eachCommitThreshold;
}
function setEachCommitThreshold(?int $eachCommitThreshold=null): self {
$this->eachCommitThreshold = self::verifix_eachCommitThreshold($eachCommitThreshold);
return $this;
}
/**
* initialiser ce channel avant sa première utilisation.
*/
@ -330,6 +302,40 @@ class CapacitorChannel implements ITransactor {
return $sum !== $psum;
}
/**
* @var bool indiquer si les modifications de each doivent être gérées dans
* une transaction. si false, l'utilisateur doit lui même gérer la
* transaction.
*/
protected bool $manageTransactions;
function isManageTransactions(): bool {
return $this->manageTransactions;
}
function setManageTransactions(bool $manageTransactions=true): self {
$this->manageTransactions = $manageTransactions;
return $this;
}
/**
* @var ?int nombre maximum de modifications dans une transaction avant un
* commit automatique dans {@link Capacitor::each()}. Utiliser null pour
* désactiver la fonctionnalité.
*
* ce paramètre n'a d'effet que si $manageTransactions==true
*/
protected ?int $eachCommitThreshold;
function getEachCommitThreshold(): ?int {
return $this->eachCommitThreshold;
}
function setEachCommitThreshold(?int $eachCommitThreshold=null): self {
$this->eachCommitThreshold = self::verifix_eachCommitThreshold($eachCommitThreshold);
return $this;
}
/**
* méthode appelée lors du chargement avec {@link Capacitor::charge()} pour
* créer un nouvel élément
@ -417,9 +423,8 @@ class CapacitorChannel implements ITransactor {
return $this->capacitor;
}
function setCapacitor(Capacitor $capacitor, bool $ensureExists=true): self {
function initCapacitor(Capacitor $capacitor): self {
$this->capacitor = $capacitor;
if ($ensureExists) $this->ensureExists();
return $this;
}
@ -517,15 +522,11 @@ class CapacitorChannel implements ITransactor {
}
function exists(): bool {
return $this->capacitor->_exists($this);
}
function ensureExists(): void {
$this->capacitor->_ensureExists($this);
return $this->capacitor->exists($this);
}
function reset(bool $recreate=false): void {
$this->capacitor->_reset($this, $recreate);
$this->capacitor->reset($this, $recreate);
}
function charge($item, $func=null, ?array $args=null, ?array &$row=null): int {
@ -546,7 +547,7 @@ class CapacitorChannel implements ITransactor {
}
function discharge(bool $reset=true): Traversable {
return $this->capacitor->discharge($reset);
return $this->capacitor->discharge($this, $reset);
}
/**
@ -572,27 +573,27 @@ class CapacitorChannel implements ITransactor {
function count($filter=null): int {
$this->verifixFilter($filter);
return $this->capacitor->count($filter);
return $this->capacitor->count($this, $filter);
}
function one($filter, ?array $mergeQuery=null): ?array {
$this->verifixFilter($filter);
return $this->capacitor->one($filter, $mergeQuery);
return $this->capacitor->one($this, $filter, $mergeQuery);
}
function all($filter, ?array $mergeQuery=null): Traversable {
$this->verifixFilter($filter);
return $this->capacitor->all($filter, $mergeQuery);
return $this->capacitor->all($this, $filter, $mergeQuery);
}
function each($filter, $func=null, ?array $args=null, ?array $mergeQuery=null, ?int &$nbUpdated=null): int {
$this->verifixFilter($filter);
return $this->capacitor->each($filter, $func, $args, $mergeQuery, $nbUpdated);
return $this->capacitor->each($this, $filter, $func, $args, $mergeQuery, $nbUpdated);
}
function delete($filter, $func=null, ?array $args=null): int {
$this->verifixFilter($filter);
return $this->capacitor->delete($filter, $func, $args);
return $this->capacitor->delete($this, $filter, $func, $args);
}
function dbAll(array $query, ?array $params=null): iterable {