diff --git a/.github/workflows/continuous-integration.yml b/.github/workflows/continuous-integration.yml index b781be2..1895cb9 100644 --- a/.github/workflows/continuous-integration.yml +++ b/.github/workflows/continuous-integration.yml @@ -15,9 +15,7 @@ jobs: operating-system: - ubuntu-latest php-version: - - '8.1' - - '8.2' - - '8.3' + - '8.4' steps: - name: Checkout uses: actions/checkout@v1 diff --git a/composer.json b/composer.json index 66f142d..e4412c1 100644 --- a/composer.json +++ b/composer.json @@ -22,7 +22,7 @@ } ], "require": { - "php": ">=8.1", + "php": "^8.4", "psr/log": "^1.0 || ^2.0 || ^3.0", "ext-pdo": "*" }, diff --git a/src/AbstractExtendedPdo.php b/src/AbstractExtendedPdo.php index cb28bbc..3e237fe 100644 --- a/src/AbstractExtendedPdo.php +++ b/src/AbstractExtendedPdo.php @@ -105,7 +105,7 @@ abstract class AbstractExtendedPdo extends PDO implements ExtendedPdoInterface */ public function __call(string $name, array $arguments) { - $this->connect(); + $this->establishConnection(); if (! method_exists($this->pdo, $name)) { $class = get_class($this); @@ -127,7 +127,7 @@ public function __call(string $name, array $arguments) */ public function beginTransaction(): bool { - $this->connect(); + $this->establishConnection(); $this->profiler->start(__FUNCTION__); $result = $this->pdo->beginTransaction(); $this->profiler->finish(); @@ -145,7 +145,7 @@ public function beginTransaction(): bool */ public function commit(): bool { - $this->connect(); + $this->establishConnection(); $this->profiler->start(__FUNCTION__); $result = $this->pdo->commit(); $this->profiler->finish(); @@ -158,7 +158,7 @@ public function commit(): bool * * @return void */ - abstract public function connect(): void; + abstract public function establishConnection(): void; /** * @@ -177,7 +177,7 @@ abstract public function disconnect(): void; */ public function errorCode(): ?string { - $this->connect(); + $this->establishConnection(); return $this->pdo->errorCode(); } @@ -190,7 +190,7 @@ public function errorCode(): ?string */ public function errorInfo(): array { - $this->connect(); + $this->establishConnection(); return $this->pdo->errorInfo(); } @@ -207,7 +207,7 @@ public function errorInfo(): array */ public function exec(string $statement): int|false { - $this->connect(); + $this->establishConnection(); $this->profiler->start(__FUNCTION__); $affectedRows = $this->pdo->exec($statement); $this->profiler->finish($statement); @@ -493,7 +493,7 @@ public function getProfiler(): ProfilerInterface */ public function inTransaction(): bool { - $this->connect(); + $this->establishConnection(); $this->profiler->start(__FUNCTION__); $result = $this->pdo->inTransaction(); $this->profiler->finish(); @@ -525,7 +525,7 @@ public function isConnected(): bool */ public function lastInsertId(?string $name = null): string|false { - $this->connect(); + $this->establishConnection(); $this->profiler->start(__FUNCTION__); $result = $this->pdo->lastInsertId($name); $this->profiler->finish(); @@ -550,7 +550,7 @@ public function lastInsertId(?string $name = null): string|false */ public function perform(string $statement, array $values = []): PDOStatement { - $this->connect(); + $this->establishConnection(); $sth = $this->prepareWithValues($statement, $values); $this->profiler->start(__FUNCTION__); $sth->execute(); @@ -574,7 +574,7 @@ public function perform(string $statement, array $values = []): PDOStatement */ public function prepare(string $query, array $options = []): PDOStatement|false { - $this->connect(); + $this->establishConnection(); $sth = $this->pdo->prepare($query, $options); return $sth; } @@ -610,7 +610,7 @@ public function prepareWithValues(string $statement, array $values = []): PDOSta return $this->prepare($statement); } - $this->connect(); + $this->establishConnection(); // rebuild the statement and values $parser = clone $this->parser; @@ -645,7 +645,7 @@ public function prepareWithValues(string $statement, array $values = []): PDOSta */ public function query(string $query, ?int $fetchMode = null, mixed ...$fetch_mode_args): PDOStatement|false { - $this->connect(); + $this->establishConnection(); $this->profiler->start(__FUNCTION__); $sth = $this->pdo->query($query, $fetchMode, ...$fetch_mode_args); $this->profiler->finish($sth->queryString); @@ -670,7 +670,7 @@ public function query(string $query, ?int $fetchMode = null, mixed ...$fetch_mod */ public function quote(string|int|array|float|null $value, int $type = self::PARAM_STR): string|false { - $this->connect(); + $this->establishConnection(); $value = $value ?? ''; @@ -742,7 +742,7 @@ public function quoteSingleName(string $name): string */ public function rollBack(): bool { - $this->connect(); + $this->establishConnection(); $this->profiler->start(__FUNCTION__); $result = $this->pdo->rollBack(); $this->profiler->finish(); @@ -992,7 +992,7 @@ protected function setQuoteName(string $driver): void */ public function getAttribute(int $attribute): bool|int|string|array|null { - $this->connect(); + $this->establishConnection(); return $this->pdo->getAttribute($attribute); } @@ -1006,7 +1006,7 @@ public function getAttribute(int $attribute): bool|int|string|array|null */ public function setAttribute(int $attribute, mixed $value): bool { - $this->connect(); + $this->establishConnection(); return $this->pdo->setAttribute($attribute, $value); } } diff --git a/src/DecoratedPdo.php b/src/DecoratedPdo.php index 8438b46..0eb683f 100644 --- a/src/DecoratedPdo.php +++ b/src/DecoratedPdo.php @@ -51,7 +51,7 @@ public function __construct(PDO $pdo, ?ProfilerInterface $profiler = null) * @return void * */ - public function connect(): void + public function establishConnection(): void { // already connected } diff --git a/src/ExtendedPdo.php b/src/ExtendedPdo.php index 16e2819..bb6ff65 100644 --- a/src/ExtendedPdo.php +++ b/src/ExtendedPdo.php @@ -85,13 +85,24 @@ public function __construct( $this->setQuoteName($parts[0]); } + public static function connect( + string $dsn, + ?string $username = null, + ?string $password = null, + ?array $options = [], + array $queries = [], + ?ProfilerInterface $profiler = null + ): static { + return new static($dsn, $username, $password, $options ?? [], $queries, $profiler); + } + /** * * Connects to the database. * * @return void */ - public function connect(): void + public function establishConnection(): void { if ($this->pdo) { return; @@ -100,7 +111,7 @@ public function connect(): void // connect $this->profiler->start(__FUNCTION__); list($dsn, $username, $password, $options, $queries) = $this->args; - $this->pdo = new PDO($dsn, $username, $password, $options); + $this->pdo = PDO::connect($dsn, $username, $password, $options); $this->profiler->finish(); // connection-time queries @@ -152,7 +163,7 @@ public function __debugInfo(): array */ public function getPdo(): PDO { - $this->connect(); + $this->establishConnection(); return $this->pdo; } } diff --git a/src/ExtendedPdoInterface.php b/src/ExtendedPdoInterface.php index 88196a5..4313185 100644 --- a/src/ExtendedPdoInterface.php +++ b/src/ExtendedPdoInterface.php @@ -28,7 +28,7 @@ interface ExtendedPdoInterface extends PdoInterface * Connects to the database. * */ - public function connect(): void; + public function establishConnection(): void; /** * diff --git a/tests/ExtendedConnectPdoTest.php b/tests/ExtendedConnectPdoTest.php new file mode 100644 index 0000000..25d5269 --- /dev/null +++ b/tests/ExtendedConnectPdoTest.php @@ -0,0 +1,11 @@ +