Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Allow non-int error codes #365

Merged
merged 5 commits into from
Feb 10, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
php: [ 8.1, 8.2 ]
php: [ 8.2, 8.3 ]

steps:
- uses: actions/checkout@v3
Expand Down Expand Up @@ -37,7 +37,7 @@ jobs:
needs: [ composer ]
strategy:
matrix:
php: [ 8.1, 8.2 ]
php: [ 8.2, 8.3 ]

outputs:
coverage: ${{ steps.store-coverage.outputs.coverage_text }}
Expand Down Expand Up @@ -90,7 +90,7 @@ jobs:
needs: [ composer ]
strategy:
matrix:
php: [ 8.1, 8.2 ]
php: [ 8.2, 8.3 ]

steps:
- uses: actions/download-artifact@v3
Expand All @@ -112,7 +112,7 @@ jobs:
needs: [ composer ]
strategy:
matrix:
php: [ 8.1, 8.2 ]
php: [ 8.2, 8.3 ]

steps:
- uses: actions/download-artifact@v3
Expand All @@ -136,7 +136,7 @@ jobs:
needs: [ composer ]
strategy:
matrix:
php: [ 8.1, 8.2 ]
php: [ 8.2, 8.3 ]

steps:
- uses: actions/download-artifact@v3
Expand Down
4 changes: 4 additions & 0 deletions phpunit.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,10 @@
colors="true"
cacheDirectory="test/phpunit/.phpunit.cache"
bootstrap="vendor/autoload.php"
displayDetailsOnTestsThatTriggerWarnings="true"
displayDetailsOnTestsThatTriggerDeprecations="true"
displayDetailsOnTestsThatTriggerErrors="true"
displayDetailsOnTestsThatTriggerNotices="true"
>
<coverage />

Expand Down
3 changes: 2 additions & 1 deletion src/Connection/Driver.php
Original file line number Diff line number Diff line change
Expand Up @@ -45,11 +45,12 @@ protected function connect():void {
Connection::ATTR_ERRMODE => Connection::ERRMODE_EXCEPTION,
];

if($this->settings->getSchema() === Settings::DRIVER_MYSQL) {
if($this->settings->getDriver() === Settings::DRIVER_MYSQL) {
$options[Connection::MYSQL_ATTR_INIT_COMMAND]
= "SET SESSION collation_connection='"
. $this->settings->getCollation()
. "'";
$options[Connection::MYSQL_ATTR_LOCAL_INFILE] = true;
}

$this->connection = new Connection(
Expand Down
54 changes: 33 additions & 21 deletions src/Query/SqlQuery.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,9 @@
/** @SuppressWarnings(PHPMD.ExcessiveClassComplexity) */
class SqlQuery extends Query {
const SPECIAL_BINDINGS = [
"limit",
"offset",
"groupBy",
"orderBy",
"field" => ["groupBy", "orderBy"],
"int" => ["limit", "offset"],
"string" => ["infileName"],
];

/** @param array<string, mixed>|array<mixed> $bindings */
Expand Down Expand Up @@ -72,8 +71,8 @@ public function execute(array $bindings = []):ResultSet {
}
catch(PDOException $exception) {
throw new PreparedStatementException(
$exception->getMessage(),
$exception->getCode(),
$exception->getMessage() . " (" . $exception->getCode(),
0,
$exception
);
}
Expand Down Expand Up @@ -108,24 +107,37 @@ public function injectSpecialBindings(
string $sql,
array $bindings
):string {
foreach(self::SPECIAL_BINDINGS as $special) {
$specialPlaceholder = ":" . $special;
foreach(self::SPECIAL_BINDINGS as $type => $specialList) {
foreach($specialList as $special) {
$specialPlaceholder = ":" . $special;

if(!array_key_exists($special, $bindings)) {
continue;
}
if(!array_key_exists($special, $bindings)) {
continue;
}

$replacement = $this->escapeSpecialBinding(
$bindings[$special],
$special
);
if($type !== "string") {
$replacement = $this->escapeSpecialBinding(
$bindings[$special],
$special
);
}

$sql = str_replace(
$specialPlaceholder,
$replacement,
$sql
);
unset($bindings[$special]);
if($type === "field") {
$words = explode(" ", $bindings[$special]);
$words[0] = "`" . $words[0] . "`";
$replacement = implode(" ", $words);
}
elseif($type === "string") {
$replacement = "'" . $bindings[$special] . "'";
}

$sql = str_replace(
$specialPlaceholder,
$replacement,
$sql
);
unset($bindings[$special]);
}
}

foreach($bindings as $key => $value) {
Expand Down
4 changes: 2 additions & 2 deletions test/phpunit/Connection/DefaultSettingsTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -91,12 +91,12 @@ public function testGetDefaultCharset() {
self::assertEquals(DefaultSettings::DEFAULT_COLLATION, $settings->getCollation());
}

public function getDrivers():array {
public static function getDrivers():array {
return [
[Settings::DRIVER_MYSQL, 3306],
[Settings::DRIVER_POSTGRES, 5432],
[Settings::DRIVER_SQLSERVER, 1433],
[Settings::DRIVER_SQLITE, 0],
];
}
}
}
4 changes: 2 additions & 2 deletions test/phpunit/Helper/Helper.php
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ private static function queryPathProvider(bool $exists, $extension = "sql") {
return $data;
}

public function queryPathNestedProvider() {
public static function queryPathNestedProvider() {
$data = [];

$n = rand(2, 6);
Expand Down Expand Up @@ -163,4 +163,4 @@ private static function queryCollectionPathProvider(

return $data;
}
}
}
16 changes: 8 additions & 8 deletions test/phpunit/Migration/MigratorTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ public function testCheckFileListOrder(array $fileList) {

/** @dataProvider dataMigrationFileListMissing */
public function testCheckFileListOrderMissing(array $fileList) {
$path = $this->getMigrationDirectory();
$path = self::getMigrationDirectory();
$this->createFiles($fileList, $path);

$settings = $this->createSettings($path);
Expand Down Expand Up @@ -542,15 +542,15 @@ public function testMigrationErrorOutputToStream(array $fileList) {
}
}

public function dataMigrationFileList():array {
$fileList = $this->generateFileList();
public static function dataMigrationFileList():array {
$fileList = self::generateFileList();
return [
[$fileList]
];
}

public function dataMigrationFileListMissing():array {
$fileList = $this->generateFileList(
public static function dataMigrationFileListMissing():array {
$fileList = self::generateFileList(
true,
false
);
Expand All @@ -559,8 +559,8 @@ public function dataMigrationFileListMissing():array {
];
}

public function dataMigrationFileListDuplicate():array {
$fileList = $this->generateFileList(
public static function dataMigrationFileListDuplicate():array {
$fileList = self::generateFileList(
false,
true
);
Expand Down Expand Up @@ -638,7 +638,7 @@ protected function hashMigrationToDb(
}
}

private function generateFileList($missingFiles = false, $duplicateFiles = false) {
private static function generateFileList($missingFiles = false, $duplicateFiles = false) {
$fileList = [];

$migLength = rand(10, 30);
Expand Down
4 changes: 2 additions & 2 deletions test/phpunit/Query/SqlQueryTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -238,7 +238,7 @@ public function testSpecialBindingsNoAscDesc(
self::assertStringNotContainsString(":limit", $injectedSql);
self::assertStringNotContainsString(":offset", $injectedSql);

self::assertStringContainsString("order by sortColumn", $injectedSql);
self::assertStringContainsString("order by `sortColumn`", $injectedSql);
self::assertStringContainsString("limit 100", $injectedSql);
self::assertStringContainsString("offset 25", $injectedSql);
}
Expand All @@ -260,7 +260,7 @@ public function testSpecialBindingsAscDesc(
"offset" => 25,
]);

self::assertStringContainsString("order by sortColumn desc", $injectedSql);
self::assertStringContainsString("order by `sortColumn` desc", $injectedSql);
}

/**
Expand Down
2 changes: 1 addition & 1 deletion test/phpunit/Result/RowTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ public function testGetIntNullable() {
self::assertNull($row->getInt("does_not_exist"));
}

public function data_getTestRow():array {
public static function data_getTestRow():array {
$data = [];

$columns = ["id", "name", "example", "exampleFloat", "exampleDateTime", "exampleBool"];
Expand Down
Loading