Skip to content

Commit 14348be

Browse files
committed
fix: remove obsolete logic for old explain api version (resolves #7)
1 parent 48b93b4 commit 14348be

File tree

3 files changed

+12
-54
lines changed

3 files changed

+12
-54
lines changed

composer.json

+1-2
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,7 @@
1919
"php": "^8.0",
2020
"ext-pdo": "*",
2121
"guzzlehttp/guzzle": "^6.0|^7.0",
22-
"illuminate/contracts": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0",
23-
"spatie/invade": "^1.0"
22+
"illuminate/contracts": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0"
2423
},
2524
"require-dev": {
2625
"mockery/mockery": "^1.6",

phpstan-baseline.neon

+5-15
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
parameters:
22
ignoreErrors:
3+
-
4+
message: "#^Cannot cast mixed to string\\.$#"
5+
count: 2
6+
path: src/Helpers/DatabaseHelper.php
7+
38
-
49
message: "#^Cannot access offset 'error' on mixed\\.$#"
510
count: 2
@@ -14,18 +19,3 @@ parameters:
1419
message: "#^Part \\$response\\['message'\\] \\(mixed\\) of encapsed string cannot be cast to string\\.$#"
1520
count: 2
1621
path: src/MySqlExplainException.php
17-
18-
-
19-
message: "#^Parameter \\$explainJson of class Tpetry\\\\MysqlExplain\\\\Values\\\\QueryMetrics constructor expects string, float\\|int\\|string\\|null given\\.$#"
20-
count: 1
21-
path: src/MysqlExplain.php
22-
23-
-
24-
message: "#^Parameter \\$explainTree of class Tpetry\\\\MysqlExplain\\\\Values\\\\QueryMetrics constructor expects string\\|null, float\\|int\\|string\\|null given\\.$#"
25-
count: 1
26-
path: src/MysqlExplain.php
27-
28-
-
29-
message: "#^Parameter \\$version of class Tpetry\\\\MysqlExplain\\\\Values\\\\QueryMetrics constructor expects string, float\\|int\\|string\\|null given\\.$#"
30-
count: 1
31-
path: src/MysqlExplain.php

src/Helpers/DatabaseHelper.php

+6-37
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@
66

77
use Illuminate\Database\Connection;
88
use Illuminate\Support\Str;
9-
use PDO;
10-
use PDOStatement;
119

1210
/**
1311
* @internal
@@ -42,44 +40,15 @@ public function driverName(Connection $db): string
4240

4341
/**
4442
* @param mixed[] $bindings
45-
* @return int|float|string|null
4643
*/
47-
public function queryScalar(Connection $db, string $sql, array $bindings = []): mixed
44+
public function queryScalar(Connection $db, string $sql, array $bindings = []): string
4845
{
49-
return $this->executeQuery($db, $sql, $bindings, function (PDOStatement $statement): mixed {
50-
/** @var int|float|string|null $value */
51-
$value = $statement->fetchColumn();
52-
53-
return $value;
54-
});
55-
}
56-
57-
/**
58-
* @template T
59-
*
60-
* @param mixed[] $bindings
61-
* @param (callable(\PDOStatement): T) $fn
62-
* @return T
63-
*/
64-
private function executeQuery(Connection $db, string $sql, array $bindings, callable $fn): mixed
65-
{
66-
invade($db)->reconnectIfMissingConnection();
67-
$pdo = $db->getPdo();
68-
69-
$emulatePrepares = $pdo->getAttribute(PDO::ATTR_EMULATE_PREPARES);
70-
$errorMode = $pdo->getAttribute(PDO::ATTR_ERRMODE);
71-
try {
72-
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, true);
73-
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
46+
if (method_exists($db, 'scalar')) {
47+
return (string) $db->scalar($sql, $bindings);
48+
}
7449

75-
$statement = $pdo->prepare($sql);
76-
$db->bindValues($statement, $db->prepareBindings($bindings));
77-
$statement->execute();
50+
$record = (array) $db->selectOne($sql, $bindings);
7851

79-
return $fn($statement);
80-
} finally {
81-
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, $emulatePrepares);
82-
$pdo->setAttribute(PDO::ATTR_ERRMODE, $errorMode);
83-
}
52+
return (string) reset($record);
8453
}
8554
}

0 commit comments

Comments
 (0)