modifs.mineures sans commentaires

This commit is contained in:
Jephté Clain 2024-06-05 11:44:13 +04:00
parent fdf19326b0
commit 1c57fcf041
7 changed files with 38 additions and 12 deletions

View File

@ -32,7 +32,7 @@ class CapacitorChannel {
if ($primaryKeys === null && $columnDefinitions !== null) { if ($primaryKeys === null && $columnDefinitions !== null) {
$index = 0; $index = 0;
foreach ($columnDefinitions as $col => $def) { foreach ($columnDefinitions as $col => $def) {
if ($col == $index) { if ($col === $index) {
$index++; $index++;
if (preg_match('/\bprimary\s+key\s+\((.+)\)/i', $def, $ms)) { if (preg_match('/\bprimary\s+key\s+\((.+)\)/i', $def, $ms)) {
$primaryKeys = preg_split('/\s*,\s*/', trim($ms[1])); $primaryKeys = preg_split('/\s*,\s*/', trim($ms[1]));

View File

@ -4,4 +4,11 @@ namespace nur\sery\db\mysql;
use nur\sery\db\pdo\Pdo; use nur\sery\db\pdo\Pdo;
class Mysql extends Pdo { class Mysql extends Pdo {
function getDbname(): ?string {
$url = $this->dbconn["name"] ?? null;
if ($url !== null && preg_match('/^mysql(?::|.*;)dbname=([^;]+)/i', $url, $ms)) {
return $ms[1];
}
return null;
}
} }

View File

@ -36,10 +36,11 @@ class MysqlStorage extends CapacitorStorage {
} }
function _exists(CapacitorChannel $channel): bool { function _exists(CapacitorChannel $channel): bool {
$tableName = $this->mysql->get([ $mysql = $this->mysql;
$tableName = $mysql->get([
"select table_name from information_schema.tables", "select table_name from information_schema.tables",
"where" => [ "where" => [
#"table_schema" => database_name #XXX "table_schema" => $mysql->getDbname(),
"table_name" => $channel->getTableName(), "table_name" => $channel->getTableName(),
], ],
]); ]);

View File

@ -71,13 +71,15 @@ class _query_base extends _base {
} elseif (is_string($value)) { } elseif (is_string($value)) {
if (self::is_sqldate($value)) { if (self::is_sqldate($value)) {
# déjà dans le bon format # déjà dans le bon format
} elseif (Date::isa_date($value)) { } elseif (Date::isa_date($value, true)) {
$value = new Date($value); $value = new Date($value);
$value = $value->format('Y-m-d'); $value = $value->format('Y-m-d');
} elseif (DateTime::isa_datetime($value)) { } elseif (DateTime::isa_datetime($value, true)) {
$value = new DateTime($value); $value = new DateTime($value);
$value = $value->format('Y-m-d H:i:s'); $value = $value->format('Y-m-d H:i:s');
} }
} elseif (is_bool($value)) {
$value = $value? 1: 0;
} }
} }

View File

@ -159,8 +159,8 @@ class Stream extends AbstractIterator implements IReader, IWriter {
} else { } else {
# il faut déterminer le type de fichier CSV en lisant la première ligne # il faut déterminer le type de fichier CSV en lisant la première ligne
$pos = IOException::ensure_valid(ftell($fd)); $pos = IOException::ensure_valid(ftell($fd));
$line = IOException::ensure_valid(fgets($fd)); $line = fgets($fd);
$line = strpbrk($line, ",;\t"); if ($line !== false) $line = strpbrk($line, ",;\t");
if ($line === false) { if ($line === false) {
# aucun séparateur trouvé, prender la valeur par défaut # aucun séparateur trouvé, prender la valeur par défaut
$flavour = static::DEFAULT_CSV_FLAVOUR; $flavour = static::DEFAULT_CSV_FLAVOUR;
@ -308,11 +308,22 @@ class Stream extends AbstractIterator implements IReader, IWriter {
} }
} }
protected function _teardown(): void { private function _rewindFd(): void {
$md = stream_get_meta_data($this->fd); $md = stream_get_meta_data($this->fd);
if ($md["seekable"]) $this->fseek(0); if ($md["seekable"]) $this->fseek(0);
} }
protected function _teardown(): void {
$this->_rewindFd();
}
function rewind(): void {
# il faut toujours faire un rewind sur la resource, que l'itérateur aie été
# initialisé ou non
if ($this->_hasIteratorBeenSetup()) parent::rewind();
else $this->_rewindFd();
}
############################################################################# #############################################################################
# Writer # Writer

View File

@ -75,6 +75,11 @@ abstract class AbstractIterator implements Iterator, ICloseable {
# Implémentation par défaut # Implémentation par défaut
private $setup = false; private $setup = false;
protected function _hasIteratorBeenSetup(): bool {
return $this->setup;
}
private $valid = false; private $valid = false;
private $toredown = true; private $toredown = true;

View File

@ -43,18 +43,18 @@ class DateTime extends \DateTime {
preg_match(self::YMDHISZ_PATTERN, $datetime); preg_match(self::YMDHISZ_PATTERN, $datetime);
} }
static function isa_datetime($datetime): bool { static function isa_datetime($datetime, bool $frOnly=false): bool {
if ($datetime instanceof DateTimeInterface) return true; if ($datetime instanceof DateTimeInterface) return true;
if (!is_int($datetime) && !is_string($datetime)) return false; if (!is_int($datetime) && !is_string($datetime)) return false;
return preg_match(self::DMYHIS_PATTERN, $datetime) || return preg_match(self::DMYHIS_PATTERN, $datetime) ||
preg_match(self::YMDHISZ_PATTERN, $datetime); (!$frOnly && preg_match(self::YMDHISZ_PATTERN, $datetime));
} }
static function isa_date($datetime): bool { static function isa_date($datetime, bool $frOnly=false): bool {
if ($datetime instanceof DateTimeInterface) return true; if ($datetime instanceof DateTimeInterface) return true;
if (!is_int($datetime) && !is_string($datetime)) return false; if (!is_int($datetime) && !is_string($datetime)) return false;
return preg_match(self::DMY_PATTERN, $datetime) || return preg_match(self::DMY_PATTERN, $datetime) ||
preg_match(self::YMD_PATTERN, $datetime); (!$frOnly && preg_match(self::YMD_PATTERN, $datetime));
} }
static function _YmdHMSZ_format(\DateTime $datetime): string { static function _YmdHMSZ_format(\DateTime $datetime): string {